Re: strange autoload behavior

From: 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 phpdoc+get-969379084@lists.php.net to get a copy of this message
Derick Rethans schreef:
On Thu, 10 Jul 2008, Gergely Hodicska wrote:
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.
You can actually catch it *in* the autoload method, it just wouldn't bubble out of it.
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');
		} 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


« previous php.doc (#969379084) next »