Re: [PHP-DEV] [RFC] Function Autoloading (mark 5)

[email protected] (Tim Düsterhus) Mon, 13 Jul 2026 19:53:59 +0200
Newsgroups php.internals
Message-ID <[email protected]>
Hi

Apologies for getting back to you only now, the list is incredibly 
active and I needed to get back into the RFC and my old code.

On 2026-06-20 17:11, Paul M. Jones wrote:
>>> The concern that occurred to me is similar: if I rely on function 
>>> autoloading, but forget to fully-qualify a name in the current 
>>> namespace, it would accidentally work as long as some other code 
>>> triggered loading of that function first. Then some small refactoring 
>>> - or even a different path through the code at runtime - and it will 
>>> silently fall back to a function in the global namespace instead.
>> 
>> Agreed on this being a non-starter for the proposal for me.
> 
> I don't especially like it myself. FWIW, I don't actually *see* a lot 
> of namespaced calls that this would fumble on (the vast majority of 
> function autoloading I think would apply to global user functions based 
> on my legacy work) but it's still kind of clunky.

Yes, (assumed) real-world use cases are not a good reason to add 
inconsistencies or gotchas into the language. Even 0.1% of code is a 
vast amount for PHP.

>> On Jun 20, 2026, at 08:19, Tim Düsterhus <[email protected]> wrote:
>> 
>> Hi
>> 
>> Am 2026-06-19 13:31, schrieb Rowan Tommins [IMSoP]:
>> 
>>> Interesting that it's such a small change. My only comment would be 
>>> that if we do add this, let's please not use the word "strict"; it 
>>> tends to lead to incorrect assumptions like "strict is always 
>>> better".
>> 
>> For reference, I did something similar a year ago in 
>> https://github.com/TimWolla/php-src/commit/aa6fc0c6ef3661e2fea4043ff1e07897952da2a5, 
>> with an additional variant of erroring when no explicit decision is 
>> made, which could also be a precusor to deprecate the global fallback 
>> entirely.
> 
> Do you feel `force_global_function_fallback=false` and 
> `strict_namespace=1` are substantially the same thing, or are they 
> different in some way?

`force_global_function_fallback` in my implementation is just the 
existing known behavior. It's basically the *inverse* of 
`strict_namespace=1` from what I understand. It came out of a co-worker 
disliking both to fully-qualify global functions and to `use function` 
them. But at the same time, they are not using namespaced functions, so 
they wanted to *force* the use of the global functions to benefit from 
the compiler optimizations for some of the functions (e.g. 
`\sprintf()`). Personally I'm team “fully qualify everything”, so the 
`error_on_unqualified_function` part was my wishlist entry.

In any case, it isn't an RFC, so I have not given my implementation much 
consideration :-)

Best regards
Tim Düsterhus