2012-01-02 2 views
0

Из-за проблем с производительностью (сравнительный тест) Я пытаюсь использовать другой автозагрузчик, чем Zend_Loader_Autoloader по умолчанию.Как эффективно заменить Zend_Loader_Autoloader?

Я попытался другой метод, с помощью:

$autoloader->removeAutoloader(array('Zend_Loader_Autoloader', 'autoload')) 
    ->setDefaultAutoloader(array($loader, 'loadClass')); 

Поскольку Autoloader сильно связан с большей составляющей Zend Framework, я не могу «удалить его».

Я сделал шаг Xdebug за шагом отладками и это выглядит как автозагрузчик работает так:

1) деЫпзЬапс 2) Проверьте, если вызываемый класс корень является известным пространством имен, и если автозагрузчик существует для пространства имен 3) Положите в стек автозагрузчик без имен, 4) Пробовал автозагрузчик на каждом автозагрузчике, пока не будет найдена действительная.

Однако в моем случае мой автозагрузчик уже делает это (я использую Autoploader Opl с помощью стратегии classMap), я уже зарегистрировал namspace с их соответствующим путем.

Так что это выглядит немного накладными для меня, потому что я хотел бы, чтобы мой автозагрузчик использовался при самом простейшем поиске в обход всех проверок Zend.

У вас есть идеи по улучшению этого? Как я могу эффективно использовать пользовательский (и опытный) автозагрузчик в рамках проекта Zend Framework и использовать Zend_Loader_Autoloader

+0

@mario, это то, что я на самом деле, OPL предоставляет ClassMapLoader и его classMap строитель который генерирует массив типа "ar ray ('My_Class_Name' => 'My/Class/Name.php'); что довольно просто – Trent

ответ

1

Автозагрузчик не «сильно связан». Вы всегда можете использовать все PSR-0 жалобы автозагрузчика вам нравится, но в этом случае вы не должны использовать Zend_Loader_Autoloader зарегистрировать автозагрузчика в Zend_Loader_Autoloader заменить Zend_Loader_Autoloader;)

spl_autoload_register($myAutoload); 
+0

Ну ZF связан с Zend_Loader и Zend_Loader_Autoloader, некоторые классы (IE Zend_Mail) используют метод Zend_Loader :: loadClass(), который на самом деле использует Zend_Loader_Autoloader, насколько я знаю, Zend_Loader_Autoloader - это всего лишь оболочка для spl_autoloader_register, но поскольку он имеет тенденцию автоматически регистрироваться при использовании Zend_Application (что ** требует ** Zend_Loader_Autoloader). Однако, как вы думаете, я мог бы зайти в верхнюю часть стека автозагрузчика, если я зарегистрирую мой раньше, чем все загрузочные файлы ZF? Моя цель - никогда не использовать автозагрузчик ZF, кроме как резерв. – Trent

+0

Не заметил, что некоторые компоненты вызывают 'loadClass()' напрямую ... да, вы можете зарегистрировать столько автозагрузчиков, сколько хотите, с помощью 'spl_autoload_register()' и как только класс будет существовать, PHP нарушит цепочку автозагрузки, Значение: Если ваш загрузчик загружает класс, никакой дополнительный загрузчик не вызывается. – KingCrunch

+0

Хорошо, я попробую. (Взгляните на библиотеку/Zend/Mail/Transport/Smtp.php: Zend_Loader :: loadClass ($ connectionClass);) – Trent

1

Пока не отвечает сам по себе этот пост из Зенд свинец, Mathew, может оказаться полезным в демонстрации того, как упасть в замещающий заряжания (и более эффективный один на этом)

http://mwop.net/blog/262-Backported-ZF2-Autoloaders

Смежные вопросы