On Sun, Aug 18, 2024, at 11:36, Stephen Reay wrote:
> 
> Hi Rob,
> 
>> On 18 Aug 2024, at 04:33, Rob Landers <rob@bottled.codes> wrote:
>> 
>> I wouldn't consider it a BC break, no. But (ironically?), Symfony crashes 
>> with this change.
> 
> 
> I wasn't aware of that specific code before but it's exactly the type of 
> issue I was talking about earlier.
> 
>> Ah, good catch. I've updated this and gone through other relevant functions.
> The RFC now says "The spl_autoload function will not be updated.", but that 
> will *also* break if it isn't updated to at least *account for*, even if it 
> doesn't *use* the second argument given.
> 
> However I'm also curious why you would *specifically* make it *not* support 
> function loading?
> The current implementation should work unmodified, once the signature is 
> changed to accept an int as the second parameter (and move the current 2nd 
> parameter to 3rd),  There is nothing "class specific" in the existing 
> implementation except for a couple of variable names.
> 
> 
> I would imagine you also need to update spl_autoload_unregister[1] - it also 
> needs to be able to identify the type of autoloader it's operating on 
> (because the same autoloader might be defined for both types).
> 
> And lastly I think you'd need to adapt spl_autoload_functions[2] too - 
> perhaps the same as the others, introduce a parameter `int $type = 
> SPL_AUTOLOAD_CLASS`, so existing code works as-is, otherwise it'd be 
> impossible to know how a given autoloader was registered.
> 
> 
> 1: https://www.php.net/manual/en/function.spl-autoload-unregister.php
> 2: https://www.php.net/manual/en/function.spl-autoload-functions.php
> 
> 
> Cheers
> 
> Stephen 

Hello again internals,

The implementation has now reached a stable point and things discovered during 
the implementation have been reflected in the RFC text itself.

I did my best to assess the impact to Opcache, but I suspect someone much more 
familiar with how opcache works will need to take a look. From my understanding 
of the changes needed in zend_execute, it looks like there are some changes 
needed to the JIT helpers, but there may be more changes required that aren't 
so obvious. I've added a helper that can be used as a drop-in replacement for 
looking up functions from the function table directly, which should help.

Lastly, I do plan to open a docs PR in the coming week that will probably 
trigger some smaller updates to the RFC; mostly to smooth out the wording and 
make it more friendly for non-technical people, but the technical aspects 
shouldn't change (barring the discussion here, of course).

> The RFC now says "The spl_autoload function will not be updated.", but that 
> will *also* break if it isn't updated to at least *account for*, even if it 
> doesn't *use* the second argument given.

I've updated the text to reflect exactly that, it did require updating. ;)

> However I'm also curious why you would *specifically* make it *not* support 
> function loading?
> The current implementation should work unmodified, once the signature is 
> changed to accept an int as the second parameter (and move the current 2nd 
> parameter to 3rd),  There is nothing "class specific" in the existing 
> implementation except for a couple of variable names.

I mostly decided not to support it to avoid the inevitable bikeshedding of how 
a "default function autoloader" would work. I really want to push that to a 
separate RFC, unless there was a general consensus of an implementation. If we 
are fine reusing the existing default class autoloading, then I am fine with 
that.

> And lastly I think you'd need to adapt spl_autoload_functions[2] too - 
> perhaps the same as the others, introduce a parameter `int $type = 
> SPL_AUTOLOAD_CLASS`, so existing code works as-is, otherwise it'd be 
> impossible to know how a given autoloader was registered.

I've also added those functions as well.

— Rob

Reply via email to