spl_autoload_register- Что именно это означает? Давайте попробуем понять это с помощью примера:
function Autoloader($className)
{
require_once $path.$className.'.php';
}
spl_autoload_register('Autoloader');
$myObj = new MyClass();
Здесь мы только экземпляр класса с именем, как «MyClass» с указанием отказа включить или требуют заявления.
Разве это не круто? Итак, как мы это сделали? Давайте заглянем.
Здесь мы зарегистрировали функцию под названием «Автозагрузчик» с функцией spl_autoload_register(). Когда мы создаем экземпляр «MyClass», имя класса (MyClass) передается PHP в «spl_autoload_register()», где зарегистрированная функция выбирает его как параметр. И при дешифровке функции Autoloader мы включили путь к этому файлу класса.
Это просто здорово! Подумайте о ситуации, когда у вас есть пара классов, и все они не будут использоваться в каждом случае ИЛИ на каждой странице. В таких случаях spl_autoload_register() может стать для вас настоящим спасителем.
Вам просто нужно создать экземпляр, а spl_autoload_register() позаботится об отдыхе.
Вместо регистрации функции вы также можете сделать это следующим образом:
spl_autoload_register(function ($class) {
include 'classes/' . $class . '.class.php';
});
Но этот кусок кода работает только с PHP> = 5.3.0
Вы можете рассмотреть spl_autoload_register() в виде замена __autoload(), который может быть определен как:
__autoload() - Попытка загрузить неопределенный класс
Давайте попробуем разобраться с помощь примера.
<?php
// we've writen this code where we need
function __autoload($classname) {
$filename = "./". $classname .".php";
include_once($filename);
}
// we've called a class ***
$obj = new myClass();
?>
Но у вас есть недостаток в том, что вам нужно написать эту функцию в каждом из ваших файлов классов.
Почему не рекомендуется использовать автозагрузку? – Nick
@Nick: 'spl_autoload_register' в порядке,' __autoload' не является, как [указано в руководстве] (http://php.net/__autoload). Он не обеспечивает большую гибкость и может быть устаревшим в будущем. – netcoder
Спасибо .. Я добавлю file_exist и все работаю, но почему первая функция всегда терпит неудачу, если я использую «require»? Я использую «require», и ничего не получается. –