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. You may define an __autoload function which is automatically called in case you are trying to use a class/interface which hasn't been defined yet. By calling this function the scripting engine is given a last chance to load the class before PHP fails with an error. spl_autoload_register provides a more flexible alternative for autoloading classes. For this reason, using __autoload is discouraged and may be deprecated or removed in the future. Prior to 5.3.0, exceptions thrown in the __autoload function could not be caught in the catch block and would result in a fatal error. From 5.3.0+ exceptions thrown in the __autoload function can be caught in the catch block, with 1 provision. If throwing a custom exception, then the custom exception class must be 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 spl_autoload_register