я действительно не получаю документы для spl_autoload
bool spl_autoload_register ([ callback $autoload_function ] )
от моего понимания это попытается выполнить функции, зарегистрированные, когда php уже столкнется с классом, не загруженным. так пример,
public function autoload() {
require ('nonLoadedClass.php');
}
spl_autoload_register(autoload);
$x = new nonLoadedClass();
заставит требование работать? таким образом, я могу также зарегистрировать много функций автозагрузки?
public function autoloadXXX() {...}
public function autoloadYYY() {...}
public function autoloadZZZ() {...}
spl_autoload_register('autoloadXXX');
spl_autoload_register('autoloadYYY');
spl_autoload_register('autoloadZZZ');
в случае доктрины,
require_once(dirname(__FILE__) . '/lib/vendor/doctrine/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));
массив передается, таким образом, я предполагаю, что он попытается выполнить функцию автозагрузки в классе Доктрины (который требовался)?
spl_autoloader_register
регистрирует функцию / метод обратного вызова, который будет вызываться, когда ваш код пытается использовать неизвестный класс.
Функция обратного вызова можно описать несколькими способами:
'my_function'
массив ('MyClass', 'myMethod')
array ($ myObject, 'myMethod')
В случае Doctrine это кажется вторым решением: если используется класс, о котором PHP не знает, автозагрузчик вызовите Doctrine :: autoload
, передав ему имя класса в качестве параметра.
так что я могу также зарегистрировать много автозагрузок функции?
Да, можно, с помощью spl_autoload_register
:
Если должно быть несколько автозагрузок функции,
spl_autoload_register ()
позволяет это. Это эффективно создает очередь функций автозагрузки, и проходит через каждую из них в порядок их определения.
Но мы обычно не определяем одну функцию / метод автозагрузки для каждого имеющегося у нас класса; я полагаю, это было бы довольно неэффективно.
Вместо этого мы используем имя класса, полученное функцией автозагрузки, чтобы решить, какой файл следует включить.
Например, функция автозагрузки может выглядеть так :
function my_autoloader($className)
{
require LIBRARY_PATH . '/' . $className . '.php';
}
Уловка в том, что если ваши файлы названы в честь классов, которые они содержат, это сразу же становится намного проще; -)
Вот почему классы часто именуются с использованием соглашения PEAR: My_Class_Name
maps в файл My / Class / Name.php
То, что сказано, верно. Он вызывается при создании экземпляра неизвестного класса. Затем у вас появляется возможность включить / потребовать необходимый файл.
Когда функция находится в классе, вы должны передать массив. В данном случае это статическая функция, потому что они передают класс Doctrine вместо экземпляра класса Doctrine.
Вся ваша инструкция верна.
spl_autoload_register
позволяет вам зарегистрировать несколько функций автозагрузки. В случае, если вы пытаетесь создать или использовать объект класса, который не был загружен в среду PHP, PHP выполнит все ваши функции автозагрузки, ищущие этот класс.
В приведенном вами примере Doctrine используется то, что называется обратный вызов для регистрации метода внутри класса. Обратный вызов - это просто массив, содержащий имя класса (для статических методов) или экземпляр этого класса (для нестатических методов) и имя метода.