Autoloading Classes

Examples:
Autoload example

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().

This example attempts to load the classes MyClass1 and MyClass2 from the files MyClass1.php and MyClass2.php respectively.

1
2
3
4
5
6
7
8
<?php
spl_autoload_register(function ($class_name) {
    include $class_name '.php';
});
 
$obj  new MyClass1();
$obj2 new MyClass2(); 
?>
Autoload other example

This example attempts to load the interface ITest.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
 
spl_autoload_register(function ($name) {
    var_dump($name);
});
 
class Foo implements ITest {
}
 
/*
string(5) "ITest"
 
Fatal error: Interface 'ITest' not found in ...
*/
?>
Autoloading with exception handling for 5.3.0+

This example throws an exception and demonstrates the try/catch block.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
spl_autoload_register(function ($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 example will output:

Want to load NonLoadableClass.
Unable to load NonLoadableClass.
Autoloading with exception handling for 5.3.0+ - Missing custom exception

This example throws an exception for a non-loadable, custom exception.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
spl_autoload_register(function ($name) {
    echo "Want to load $name.\n";
    throw new MissingException("Unable to load $name.");
});
 
try {
    $obj new NonLoadableClass();
catch (Exception $e) {
    echo $e->getMessage(), "\n";
}
?>

The above example will output:

Want to load NonLoadableClass.
Want to load MissingException.

Fatal error: Class 'MissingException' not found in testMissingException.php on line 4
doc_php
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.