Re: __autoload() enhancement

From: Date: Sun, 03 Apr 2005 11:21:44 +0000
Subject: Re: __autoload() enhancement
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-15740@lists.php.net to get a copy of this message
Zeev Suraski wrote:
All, One problem that became apparent after the introduction of __autoload(), is that different pieces of code, sometimes coming from different sources, may want to declare this function in a different way. Today, __autoload() is treated like any other function, so it's impossible to re-declare it. Marcus tried to solve it by introducing an __autoload() wrapper in SPL. Personally I think it's probably not the right way to go, but that's beside the point right now. What I'd like to suggest is a change in the behavior of __autoload(), so that multiple __autoload()'s could be defined. Essentially, declaring __autoload() would in fact add the function to the list of functions that are called in case a missing class is referenced. However, it will not actually place a function named __autoload() in the PHP function table. That way, it would be possible to declare multiple __autoloads(), and have all of them called when a missing class is spotted. The two issues with this solution are: 1. It will be impossible to use the standard means to determine whether __autoload() is declared or not. I don't think that's a very important issue but it's there nonetheless. 2. We need to determine what makes sense as far as calling order if we have more than one __autoload(). My guess would be calling them in the order they were registered, and checking whether the class was defined after each one (if it was - stop). That solution maintains downwards compatibility (almost, other than issue #1). Thoughts? Zeev Hi Zeev,
if there will be chained __autoload() functions, isn´t it a good idea to give to the user the possibility to register autoload funcs like it is with the shutdown functions. I think that the user creating the queue is more reliable than relying on the include file order except if all the __autoload() appear in one file in the sequence they are going to be used. Therefore every submodule of a system can register it´s own __autoload() which will know how to handle the module classes. The handling can be different for another module. Andrey

« previous php.internals (#15740) next »