Autoloading Classes Many developers writing object-oriented applications create one PHP source file per class definition. One of the biggest annoyances is having to write a long list of needed includes at the beginning of each script (one for each class). In PHP 5, this is no longer necessary. The spl_autoload_register function registers any number of autoloaders, enabling for classes and interfaces to be automatically loaded if they are currently not defined. By registering autoloaders, PHP is given a last chance to load the class or interface before it fails with an error. Whilst the __autoload function can also be used for autoloading classes and interfaces, it's preferred to use the spl_autoload_register function. This is because it is a more flexible alternative (enabling for any number of autoloaders to be specified in the application, such as in third party libraries). For this reason, using __autoload is discouraged and it may be deprecated in the future. 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. Autoloading is not available if using PHP in CLI interactive mode. 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. Autoload example This example attempts to load the classes MyClass1 and MyClass2 from the files MyClass1.php and MyClass2.php respectively. ]]> Autoload other example This example attempts to load the interface ITest. ]]> Autoloading with exception handling for 5.3.0+ This example throws an exception and demonstrates the try/catch block. getMessage(), "\n"; } ?> ]]> &example.outputs; Autoloading with exception handling for 5.3.0+ - Missing custom exception This example throws an exception for a non-loadable, custom exception. getMessage(), "\n"; } ?> ]]> &example.outputs; &reftitle.seealso; unserialize unserialize_callback_func spl_autoload_register spl_autoload __autoload