Edit report at https://bugs.php.net/bug.php?id=61442&edit=1
ID: 61442 Comment by: yoorick at samovarchik dot info Reported by: yks-uno at yandex dot ru Summary: SPL autoload issues Fatal Error if a handler throws exception Status: Open Type: Bug Package: SPL related Operating System: Linux, FreeBSD PHP Version: 5.3.10 Block user comment: N Private report: N New Comment: If you try to use a class constant (e.g. Foo::BAR) of an unexisting class, autoloader will also fail to throw an exception and the script will die with the "class not found" fatal error. (PHP 5.3.16) Previous Comments: ------------------------------------------------------------------------ [2012-03-19 19:18:01] yks-uno at yandex dot ru Description: ------------ If a handler is registered for autoloading (whether via spl_autoload_register() or __autoload()) and it throws an exception when a class is not found, the exception can not be caught as usual if a method of the target class is statically called. Instead, a Fatal Error: Class not found is issued (which is quite what the autoloader is meant to avoid!) Yet, when, e.g. trying to access a static field of that class, the exceptions get caught correctly. Tested on several PHP versions (5.3.3 - 5.3.10) on Linux and FreeBSD. Test script: --------------- <? function x($class) { print "xxx\n"; // gets printed throw new Exception("Class '{$class}' not found"); } spl_autoload_register('x'); try { $a = A::z(); // FATAL ERROR: class 'A' not found // NOTE: // $a = A::$z; - will be correctly caught } catch (Exception $ex) { print "{$ex}\n"; // never gets executed } Expected result: ---------------- xxx exception 'Exception' with message 'Class 'A' not found' in <FILE>:5 --- this is what gets output in case the exception is caught Actual result: -------------- xxx Fatal error: Class 'A' not found in <FILE> on line 10 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=61442&edit=1