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.
Note: Exceptions thrown in __autoload function cannot be caught in the catch block and results in a fatal error.
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().
Example #1 Autoload example
This example attempts to load the classes MyClass1 and MyClass2 from the files MyClass1.php and MyClass2.php respectively.
<?php function __autoload($class_name) { require_once $class_name . '.php'; }
$obj = new MyClass1(); $obj2 = new MyClass2(); ?>
This example attempts to load the interface ITest.
<?php
function __autoload($name) { var_dump($name); }
class Foo implements ITest { }
/* string(5) "ITest"
Fatal error: Interface 'ITest' not found in ... */ ?>