PHP Autoloading Classes
How to autoload a class
To develop a large scale application, which should be fully based on object-oriented. This application executes a single file, and this single creates instances & call objects of all stored object-orient program files.
So, there are needs a mechanism to call classes automatically.
The __autoload() function is used to autoload classes and interfaces, It have alternate function to autoload classes is “spl_autoload_register()”.
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.
Note:
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.
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().
How to autoload a class with an example
This example attempts to load the classes MyClass1 and MyClass2 from the files MyClass1.php and MyClass2.php respectively.
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
How to autoload a class with an exception handler
This example throws an exception and demonstrates the try/catch block.
<?php
spl_autoload_register(function ($name) {
echo "Want to load $name.\n";
throw new Exception("Unable to load $name.pa");
});
try {
$obj = new NonLoadableClass();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
Output:
Want to load NonLoadableClass.
Unable to load NonLoadableClass.