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;
unserializeunserialize_callback_funcspl_autoloadspl_autoload_register