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(); ?>
Example #2 Autoload other example
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 ... */ ?>