Re: strange autoload behavior
| From: | Jochem Maas | Date: | Thu, 10 Jul 2008 17:14:33 +0000 |
| Subject: | Re: strange autoload behavior | ||
| References: | 1 2 3 4 5 6 | Groups: | php.doc php.internals |
| Request: | Send a blank email to internals+get-38907@lists.php.net to get a copy of this message | ||
Derick Rethans schreef:
On Thu, 10 Jul 2008, Gergely Hodicska wrote:the manual could do with that tidbit, maybe also the hack for 'getting the exception out' of __autoload() ... function __autoload($class) { try { throw new Exception('foo');You can actually catch it *in* the autoload method, it just wouldn't bubble out of it.exceptions thrown during autoload are ignored.And one more thing, this is in the manual: "Note: Exceptions thrown in __autoload function cannot be caught in the catch block and results in a fatal error." I think your explanation makes much more clear what happens, maybe it would worth to upgrade the manual. While the quoted text suggests that that if throw an exception I just can't catch it and will bubble up to top level and this cause the fatal error.
} catch (Exception $e) {
self::handleDebug($e);
if (!class_exists($class, false))
eval(sprintf('
class %1$s
{
public function __construct() { throw new AL_Exception("Class %1$s not found: %2$s"); }
public function __call($m, $a) { throw new AL_Exception("Class %1$s not found: %2$s"); }
public static function __callStatic($m, $a) { throw new AL_Exception("Class %1$s not found: %2$s"); }
}', $class, $e->__toString()));
}
}
which works best when __autoload() isn't triggered by class_exists("Foo", true)
regards, Derick