Note:
Prior to PHP 5.3, exceptions thrown in the __autoload() function could not be caught in the catch block and would result in a fatal error. From PHP 5.3 and upwards, this is possible provided that if a custom exception is thrown, then the custom exception class is available. The __autoload() function may be used recursively to autoload the custom exception class.
Note:
Autoloading is not available if using PHP in CLI interactive mode.
Note:
If the class name is used e.g. in call_user_func() then it can contain some dangerous characters such as ../. It is recommended to not use the user-input in such functions or at least verify the input in __autoload().
This example attempts to load the classes MyClass1 and MyClass2 from the files MyClass1.php and MyClass2.php respectively.
1 2 3 4 5 6 7 8 | <?php spl_autoload_register( function ( $class_name ) { include $class_name . '.php' ; }); $obj = new MyClass1(); $obj2 = new MyClass2(); ?> |
This example attempts to load the interface ITest.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php spl_autoload_register( function ( $name ) { var_dump( $name ); }); class Foo implements ITest { } /* string(5) "ITest" Fatal error: Interface 'ITest' not found in ... */ ?> |
This example throws an exception and demonstrates the try/catch block.
1 2 3 4 5 6 7 8 9 10 11 12 | <?php spl_autoload_register( function ( $name ) { echo "Want to load $name.\n" ; throw new Exception( "Unable to load $name." ); }); try { $obj = new NonLoadableClass(); } catch (Exception $e ) { echo $e ->getMessage(), "\n" ; } ?> |
The above example will output:
Want to load NonLoadableClass. Unable to load NonLoadableClass.
This example throws an exception for a non-loadable, custom exception.
1 2 3 4 5 6 7 8 9 10 11 12 | <?php spl_autoload_register( function ( $name ) { echo "Want to load $name.\n" ; throw new MissingException( "Unable to load $name." ); }); try { $obj = new NonLoadableClass(); } catch (Exception $e ) { echo $e ->getMessage(), "\n" ; } ?> |
The above example will output:
Want to load NonLoadableClass. Want to load MissingException. Fatal error: Class 'MissingException' not found in testMissingException.php on line 4
Please login to continue.