Re: Function auto-loading

From: Date: Tue, 09 Aug 2016 17:44:04 +0000
Subject: Re: Function auto-loading
References: 1 2 3 4 5 6 7 8 9 10 11 12  Groups: php.internals 
Request: Send a blank email to internals+get-94973@lists.php.net to get a copy of this message
On Tue, Aug 9, 2016 at 6:17 PM, Rowan Collins <rowan.collins@gmail.com> wrote: >> In other words, calls to substr() does not trigger the resolve - a >> statement like "use function substr" on the other hand, does. > > Ah, I see. The problem with that is, you still have to explicitly list every > function you're going to use, so you might as well just use require_once, or > call "load_function('substr')" directly. Well, no - there is still the issue of file names and paths becoming a dependency, besides issue of having to locate the file in the first place. So there is still very much a purpose to this. Importing all classes with use-statements is good practice anyhow, and - it forces you to document at the top of your file which elements you're referencing outside of the local namespace. Of course, that's opinion, but it's a common opinion - you don't see too much code in the wild with inline qualified class references, most everyone has a leading set of use-statements in every file. Actually, now that I think of it, for that reason, I might actually be okay with only qualified references triggering auto-loading after all - this would never become an issue at all, because I'd qualify everything with use-statements anyhow. Though I do think it would be somewhat easier to *explain* this feature, if it was simply triggered by the use-statement, not by the circumstance of whether the name is or isn't qualified, because it's not always obvious from looking at the code - you'd have to look at the use-statements first and then correlate those with function-calls and figure it out, every time you look at a file. That mental overhead is eliminated by just having the use-statement trigger auto-loading. Also, come to think of it, triggering the auto-loader could still be deferred, for performance reasons, even if the use-statement is what triggers is - so it wouldn't aggressively trigger the auto-loader when the use-statement is encountered, but rather the first time the a function imported with a use-statement is called. That would be more consistent with how class resolution works. I think maybe this could work after all??

« previous php.internals (#94973) next »