Zeev Suraski wrote:All,Hi Zeev,
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
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.
Why should the order of the queue matter? Regardless of which solution we pick, it will be pretty hellish if the system behaves differently based on the order of autoload()'s. The benefit of using __autoload() is that it's downwards compatible.
Zeev
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php