array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'en', ), 'this' => array ( 0 => 'function.spl-autoload-register.php', 1 => 'spl_autoload_register', ), 'up' => array ( 0 => 'ref.spl.php', 1 => 'SPL Functions', ), 'prev' => array ( 0 => 'function.spl-autoload-functions.php', 1 => 'spl_autoload_functions', ), 'next' => array ( 0 => 'function.spl-autoload-unregister.php', 1 => 'spl_autoload_unregister', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'en', 'path' => 'reference/spl/functions/spl-autoload-register.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
spl_autoload_register — Register given function as __autoload() implementation
Register a function with the spl provided __autoload queue. If the queue is not yet activated it will be activated.
If your code has an existing __autoload() function then this function must be explicitly registered on the __autoload queue. This is because spl_autoload_register() will effectively replace the engine cache for the __autoload() function by either spl_autoload() or spl_autoload_call().
If there must be multiple autoload functions, spl_autoload_register() allows for this. It effectively creates a queue of autoload functions, and runs through each of them in the order they are defined. By contrast, __autoload() may only be defined once.
callback
The autoload function being registered.
If null
, then the default implementation of
spl_autoload() will be registered.
The class
will not contain the leading
backslash of a fully-qualified identifier.
throw
This parameter specifies whether
spl_autoload_register() should throw
exceptions when the callback
cannot be registered.
prepend
If true, spl_autoload_register() will prepend the autoloader on the autoload queue instead of appending it.
Version | Description |
---|---|
8.0.0 |
callback is now nullable.
|
Example #1 spl_autoload_register() as a replacement for an __autoload() function
<?php
// function __autoload($class) {
// include 'classes/' . $class . '.class.php';
// }
function my_autoloader($class) {
include 'classes/' . $class . '.class.php';
}
spl_autoload_register('my_autoloader');
// Or, using an anonymous function
spl_autoload_register(function ($class) {
include 'classes/' . $class . '.class.php';
});
?>
Example #2 spl_autoload_register() example where the class is not loaded
<?php
namespace Foobar;
class Foo {
static public function test($class) {
print '[['. $class .']]';
}
}
spl_autoload_register(__NAMESPACE__ .'\Foo::test');
new InexistentClass;
?>
The above example will output something similar to:
[[Foobar\InexistentClass]] Fatal error: Class 'Foobar\InexistentClass' not found in ...
Example #3 The identifier will be provided without the leading backslash
<?php
spl_autoload_register(static function ($class) {
var_dump($class);
});
class_exists('RelativeName');
class_exists('RelativeName\\WithNamespace');
class_exists('\\AbsoluteName');
class_exists('\\AbsoluteName\\WithNamespace');
?>
The above example will output:
string(12) "RelativeName" string(26) "RelativeName\WithNamespace" string(12) "AbsoluteName" string(26) "AbsoluteName\WithNamespace"