Я только начинаю смотреть на Zend Framework 2 (и новичок в ZF в целом), а в руководстве пользователя они используют автозагрузку при добавлении новый модуль. Тем не менее, я считаю, что объяснение является довольно сложным для новичков. Они добавляют файл Module.php
в каталог модуля, который, среди прочего, содержит следующий код:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
Теперь я немного поработал, чтобы попытаться выяснить, что это за автозагрузка. Насколько я понимаю, автозагрузка использует spl_autoload_register()
и является способом избежать require_once()
везде в коде. Таким образом, при попытке использовать класс, который не определен, будет запущен метод autoload()
, который был зарегистрирован, который просто выполняет поиск по массиву и включает файл, как показано ниже, если он был добавлен.
// Zend/Loader/ClassMapAutoloader.php
public function autoload($class)
{
if (isset($this->map[$class])) {
require_once $this->map[$class];
}
}
Это кажется умным из-за производительности. Надеюсь, что я только что написал правильно. Исходя из этого, я пытаюсь выяснить, что происходит в getAutoloaderConfig()
из первого фрагмента кода, но я довольно смущен. Кажется, что массив, возвращаемый этим методом, используется для AutoloaderFactory::factory()
, но я не уверен, с какой целью. Активация автозагрузчиков с параметрами кажется, но точно, что это делает, я не уверен. Я предполагаю, что вторая запись массива указывает, где найти исходные файлы для пространства имен модулей - по крайней мере, это было бы моим предположением. Однако первая запись, о которой я, не знаю. В руководстве пользователя говорится следующее:
Поскольку мы находимся в разработке, нам не нужно загружать файлы через classmap, поэтому мы предоставляем пустой массив для автозагрузчика classmap.
Файл просто возвращает пустой массив. Я не уверен, в чем цель этого ClassMapAutoloader.
Извините, если моя точка неясна; в основном я пытаюсь выяснить, что происходит в getAutoloaderConfig()
и для чего используется mymodule/autoload_classmap.php
. Если бы кто-то мог пролить свет на это, это было бы высоко оценено!