A complete example with namespaces:
fruits/pinapple.php
<?php
namespace Fruits;
echo "pinapple\n";
class Pinapple { }
?>
fruits/pinapple.php
<?php
namespace Vegetables;
use Fruits\Pinapple;
echo "carrot\n";
class Carrot { }
new Pinapple(); // Let's call autoload here
?>
index.php
<?php
spl_autoload_register(function($class_name) {
@include_once(__DIR__ . '/' . strtolower(str_replace('\\', '/', $class_name)) . '.php');
});
new Vegetables\Carrot();
?>
Result:
carrot
pinapple
index2.php
<?php
spl_autoload_register(function($class_name) {
@include_once(__DIR__ . '/' . strtolower(str_replace('\\', '/', $class_name)) . '.php');
});
spl_autoload_call('Fruits\\Pinapple'); // Reverse the load order
spl_autoload_call('Fruits\\Pinapple'); // Multiple call is safe with include_once
new Vegetables\Carrot();
?>
Result:
pinapple
carrot
PHP.mk документација
spl_autoload_call
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
function.spl-autoload-call.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + превод во позадина
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
function.spl-autoload-call.php
spl_autoload_call
Референца за `function.spl-autoload-call.php` со подобрена типографија и навигација.
spl_autoload_call
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
spl_autoload_call — Обидете ги сите регистрирани __autoload() функции за вчитување на бараната класа
= NULL
Оваа функција може да се користи за рачно пребарување на класа, интерфејс, трејт или еnumeration користејќи ги регистрираните __autoload функции.
Параметри
class-
Името на класата што се пребарува.
Вратени вредности
Не се враќа вредност.
Белешки од корисници 2 забелешки
Мелнoфил ¶
пред 4 години
[email protected] ¶
пред 15 години
It should be noted, that calling spl_autoload_call on a child class, and then on its parent class, throws a fatal error.
This happens because autoloading the child class also loads the class it extends. And since spl_autoload_call forcibly calls the registered autoload function(s), not taking into account whether the class exists, a fatal error is thrown:
File: child.class.php
<?php
class Child extends Parent () {
public function __construct () {
parent::__construct();
}
}
?>
File: parent.class.php
<?php
class Parent () {
public function __construct () {
}
}
?>
File: autoload.php
<?php
/* works fine */
spl_autoload_call('Child');
/* throws: Fatal error: Cannot redeclare class Parent in /parent.class.php on line 2 */
spl_autoload_call('Parent');
?>