This function is smart enough not to add the same loader twice. This seems to work for all of the different loader formats. Example:
<?php
class ALoader
{
static function load($class) { return true; }
}
function anotherLoader($class) {
return true;
}
$F = new ALoader;
spl_autoload_register(array('ALoader', 'load'));
spl_autoload_register(array('ALoader', 'load'));
spl_autoload_register(array($F, 'load'));
spl_autoload_register('anotherLoader');
spl_autoload_register('anotherLoader');
var_dump(spl_autoload_functions());
/*
* Results on PHP5.2 CLI, linux.
* array(2) {
* [0]=>
* array(2) {
* [0]=>
* string(7) "ALoader"
* [1]=>
* string(4) "load"
* }
* [1]=>
* string(13) "anotherLoader"
* }
*/
?>
spl_autoload_register
(PHP 5 >= 5.1.2)
spl_autoload_register — Register given function as __autoload() implementation
Beschreibung
$autoload_function
[, bool $throw = true
[, bool $prepend = false
]]] )Register a function with the spl provided __autoload stack. If the stack 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 stack. 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.
Parameter-Liste
-
autoload_function -
The autoload function being registered. If no parameter is provided, then the default implementation of spl_autoload() will be registered.
-
throw -
This parameter specifies whether spl_autoload_register() should throw exceptions when the
autoload_functioncannot be registered. -
prepend -
If true, spl_autoload_register() will prepend the autoloader on the autoload stack instead of appending it.
Rückgabewerte
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Changelog
| Version | Beschreibung |
|---|---|
| 5.3.0 | Namespaces support was introduced. |
| 5.3.0 |
The prepend parameter was added.
|
Beispiele
Beispiel #1 spl_autoload_register() example
<?php
namespace Foobar;
class Foo {
static public function test($name) {
print '[['. $name .']]';
}
}
spl_autoload_register(__NAMESPACE__ .'\Foo::test'); // As of PHP 5.3.0
new InexistentClass;
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
[[Foobar\InexistentClass]] Fatal error: Class 'Foobar\InexistentClass' not found in ...
spl_autoload_register
10-Feb-2007 02:54
14-Nov-2006 10:19
If your autoload function is a class method, you can call spl_autoload_register with an array specifying the class and the method to run.
* You can use a static method :
<?php
class MyClass {
public static function autoload($className) {
// ...
}
}
spl_autoload_register(array('MyClass', 'autoload'));
?>
* Or you can use an instance :
<?php
class MyClass {
public function autoload($className) {
// ...
}
}
$instance = new MyClass();
spl_autoload_register(array($instance, 'autoload'));
?>