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
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php