ID: 42823 Updated by: [EMAIL PROTECTED] Reported By: stanlemon at mac dot com -Status: Open +Status: Assigned Bug Type: SPL related Operating System: Mac OS X 10.4.10 PHP Version: 5.2.4 -Assigned To: +Assigned To: helly
Previous Comments: ------------------------------------------------------------------------ [2007-10-02 05:10:23] stanlemon at mac dot com Description: ------------ spl_autoload_register() builds the autoload stack based upon the sequence in which methods are added to the stack. This gives precedence to the first methods loaded into the stack, not the subsequent ones. This can be an issue when someone creates an initial autoloader to cover the most generic of situations and is designed to error out when nothing can be found, either by using require() or by throwing an exception. If I wanted to add a secondary autoloader to account for an additional set of classes I would need to either unregister the initial autoloader and account for those scenarios or change the order of the autoload stack. I realize this suggest an API change, which is obviously less than desirable. Perhaps, though, a method like spl_autoload_preregister() could be added to prepend autoloaders to the stack, rather than append, thus giving them precedence in the call order. Reproduce code: --------------- function genericAutoload($class) { if (!include($class . '.php')) { throw new Exception("Can't include!"); } else { return true; } } function secondaryAutoload($class) { include('library/' . $class . '.php'); } spl_autoload_register('genericAutoload'); spl_autoload_register('secondaryAutoload'); Expected result: ---------------- Autoloaders added later on in the code would be called first, so the stack would be called in the reverse order it is now, or new autoloaders would be prepended to the autoloader stack. This would allow the first initial autoloader to error out as the last catch-all, but subsequent autoloaders to accomodate particular scenarios, where they would most likely not produce a total failure. The reproduce code will show an instance where the secondary autoloader will never be called because the first autoloaderis called and designed to fail if a file cannot be found for the given class. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=42823&edit=1