Many developers create a PHP source file for each class definition when writing object-oriented applications. A big annoyance is having to write a long list of include files (one file per class) at the beginning of each script.
In PHP 5, this is no longer necessary. You can define an __autoload() function that will be automatically called when trying to use a class that has not yet been defined. By calling this function, the scripting engine has a last chance to load the required classes before PHP fails with an error.
Tip
spl_autoload_register() provides a more flexible way to implement automatic loading of classes. Therefore, use of the __autoload() function is no longer recommended and may be deprecated in a future version.
Note:
Before version 5.3.0, exceptions thrown by the __autoload function cannot be caught by the catch statement block and will result in a fatal error. From 5.3.0+ onwards, exceptions thrown by the __autoload function can be caught by the catch statement block, but they need to follow a condition. If a custom exception is thrown, a corresponding custom exception class must exist. The __autoload function can automatically load custom exception classes recursively.
Note:
Autoloading is not available in PHP’s CLI interactive mode.
Example #1 Automatic loading example
This example attempts to load MyClass1 and MyClass2 from the MyClass1.php and MyClass2.php files respectively:
function __autoload($class_name){ require_once $class_name.'.php'; } $obj = new MyClass1(); $obj2 = new MyClass2();
Note: MyClass1.php and MyClass2.php need to be in the same directory as the current script to load. Go to
Example #2 Another example
This example attempts to load the interface ITest:
function __autoload($name) { var_dump($name); } class Foo implements ITest { } /* string(5) "ITest" Fatal error: Interface 'ITest' not found in ... */
Example #3 Automatically load exception handling in PHP 5.3.0+
This example throws an exception and uses it in the try/catch statement Demonstration in block.
function __autoload($name) { echo "Want to load $name.\n"; throw new Exception("Unable to load $name."); } try { $obj = new NonLoadableClass(); } catch (Exception $e) { echo $e->getMessage(), "\n"; }
The above routine will output:
Want to load NonLoadableClass.
Unable to load NonLoadableClass.
Example #4 Automatic loading exception handling in PHP 5.3.0+ - no custom exception mechanism
This example will An exception was thrown to a custom exception handler that does not exist.
The above routine will output:
Want to load NonLoadableClass.
Want to load MissingException.
Fatal error: Class 'MissingException' not found in testMissingException.php on line 4