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.
Although 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;
unserializeunserialize_callback_funcspl_autoload_registerspl_autoload__autoload