Как использовать spl_autoload_register? - программирование
Подтвердить что ты не робот

Как использовать spl_autoload_register?

class Manage
{

spl_autoload_register(function($class) {
    include $class . '.class.php';
});
}

Скажем, у меня есть код, как указано выше. Я решил использовать метод анонимной функции для загрузки классов, но как это используется? Как именно он определяет загрузку '$class'?

4b9b3361

Ответ 1

Вы не можете поставить код там. Вы должны добавить регистр SPL после своего класса. Если вы хотите зарегистрировать функцию внутри класса Manage, которую вы могли бы сделать:

class Manage {
    public static function autoload($class) {
        include $class . '.class.php';
    }
}

spl_autoload_register(array('Manage', 'autoload'));

Однако, как вы показали, вы можете использовать анонимную функцию. Вам даже не нужен класс, поэтому вы можете просто сделать:

spl_autoload_register(function($class) {
    include $class . '.class.php';
});

В любом случае указанная вами функция добавляется в пул функций, которые отвечают за автозагрузку. Ваша функция добавляется в этот список (так что если бы они были в списке уже, ваш будет последним). При этом, когда вы делаете что-то вроде этого:

UnloadedClass::someFunc('stuff');

PHP поймет, что UnloadedClass еще не объявлен. Затем он будет проходить через список функций автозагрузки SPL. Он будет вызывать каждую функцию с одним аргументом: 'UnloadedClass'. Затем после вызова каждой функции он проверяет, существует ли класс. Если он не продолжается до тех пор, пока он не достигнет конца списка. Если класс никогда не загружается, вы получите фатальную ошибку, сообщающую вам, что класс не существует.

Ответ 2

Как именно он определяет, какой "класс $" загружается?

$class автоматически передается php. И это имя класса еще не объявлено, но используется где-то во время выполнения