On Thursday, 3 July 2025 at 15:49, Ilija Tovilo <tovilo.il...@gmail.com> wrote:

> Hi everyone
> 
> On Wed, Jul 2, 2025 at 9:58 PM Gina P. Banyard intern...@gpb.moe wrote:
> 
> > It is this time of year again where we proposed a list of deprecations to 
> > add in PHP 8.5:
> > 
> > https://wiki.php.net/rfc/deprecations_php_8_5
> 
> 
> Thanks for the bulk RFC. Some thoughts.
> 
> > Deprecate __construct() and __destruct() in interfaces
> 

We agreed with Tim to remove it from this RFC.
We still think __destruct() in interfaces should be deprecated,
but there are other interactions with __destruct() that should be on the 
chopping board,
so this is punted to later with a comprehensive proposal.

> 
> > Deprecate using values of type null and bool as array offsets and when 
> > calling array_key_exists()
> 
> 
> The introduction section also lists float as a type to be deprecated
> in array offsets:
> 
> > Deprecate using values of type null, bool, and float as array offsets and 
> > when calling array_key_exists()
> 
> 
> Floats used as array offsets that lose precision already emit a
> warning. Can you confirm that floats used as array offsets that do not
> lose precision will not start emitting a deprecation?

Correct, that was a left over from a previous iteration.
This should be fixed now.

> > Deprecate ArrayObject and ArrayIterator with objects
> 
> 
> Just to add another issue to the list: It can also change readonly
> properties of internal classes that the engine does not expect to ever
> change. For example, Enum::$name and Enum::$value. This can break
> internal logic assumptions (e.g. hard-coded switch cases to handle
> internal enums by name) and cause memory corruption. The same goes for
> non-readonly properties guarded with the internal equivalent of
> __set().

Added this as an example

> > Deprecate passing spl_autoload_call() to spl_autoload_unregister()
> 
> 
> Is such a check actually useful? We can prevent
> spl_autoload_unregister(spl_autoload_call(...)), but we can't prevent
> spl_autoload_unregister(fn($c) => spl_autoload_call($c)). It seems
> 
> very unlikely for this to happen accidentally, and excluding all
> functions that don't make sense to pass is not feasible for obvious
> reasons. But I don't care too much.

As Tim mentioned, this is not about preventing workarounds but removing the 
ability to "flush" the autoloading table.
See https://3v4l.org/GVl7Z which showcases that a "proxy" call to 
spl_autoload_call() does NOT behave the same as passing it directly to the 
function.

Best regards,

Gina P. Banyard

Reply via email to