Я только начинаю смотреть на Zend Framework 2 (и я новичок в ZF вообще), а в user guide они используют автозагрузку при добавлении нового модуля. Тем не менее, я считаю, что объяснение является довольно сложным для новичков. Они добавление Module.php
файла в директории модуля, который среди прочего содержит следующий код:Zend Framework 2 автозагрузка
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
. Если бы кто-то мог пролить свет на это, это было бы высоко оценено!
Zend настолько переработан, что его смешно. – wesside
Абсолютно. Но я думаю, что если вы найдете свой путь вокруг, это действительно очень мощный. Как Magento. –
Я использую его на работе, у него есть взлеты и падения. Я предпочитаю Кохану, хотя и использую любые библиотеки Zend, которые мне могут понадобиться. Извините @ andy124, еще не использовали 2, извините, чтобы угнать ваш вопрос. – wesside