Отключить автозагрузчик Zend

Как отключить Zend_Loader_Autoloader?

Вы можете вручную принудительно отключить автозагрузчик, но это может привести к возникновению проблем с компонентами в зависимости от их регистрации: убедитесь, что ваш другой загрузчик закрыл это.

spl_autoload_unregister(array('Zend_Loader_Autoloader','autoload')); 

Я удалил это из конструктора Zend_Loader_Autoloader и изменил его на работу за пределами класса и отменил регистрацию вместо регистрации загрузчика.

Если вы используете Zend_Application, в index.php, после создания экземпляра ZA, вы можете получить / установить автозагрузчик, который вы хотите использовать ZF:

 $app = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/config.ini'); $app->getAutoloader()->setDefaultAutoloader('yourAutoloader'); $app->bootstrap()->run(); 

НТН

Я предполагаю, что вы используете Zend_Application , который автоматически настраивает среду PHP, автозагрузку и загрузку. Это очень удобно. К сожалению, настройка Zend_Autoloader жестко закодирована в конструкторе, и я не вижу никакого способа ее переопределить:

 public function __construct($environment, $options = null) { $this->_environment = (string) $environment; require_once 'Zend/Loader/Autoloader.php'; $this->_autoloader = Zend_Loader_Autoloader::getInstance(); //snip } 

Мое первое предложение – найти способ заставить Zend_Autoloader и ваш другой автозагрузчик работать в гармонии. Я использовал Zend_Autoloader с новой Doctrine::IsolatedClassLoader Zend_Autoloader без проблем. Совет о том, чтобы быть явным в отношении пространств имен автозагрузчиков или с помощью pushAutoloader() , действителен и должен работать.

Однако, если это не вариант, вы, вероятно, должны отказаться от использования Zend_Application и обрабатывать настройку среды и загружать ее самостоятельно. В то время как неудобство, это не должно быть слишком сложно. Большинство примеров ZF до версии 1.8 (когда было введено Zend_Application ).

Вот (теперь устаревший) набор слайдов, детализирующий некоторые из этих:

Начало работы с Zend Framework для v1.6

Как насчет в вашем bootstrap.php

 protected function _initAutoloader() { $this->getApplication() ->getAutoLoader() ->unregisterNamespace("Zend"); // or $this->getApplication() ->getAutoloader() ->removeAutoloader(); } 

Zend_Loader :: registerAutoload ('Zend_Loader', false);

Его в рамочной документации http://framework.zend.com/manual/en/zend.loader.html#zend.loader.load.autoload

Тем не менее, я не думаю, что у вас возникнут проблемы с тем, чтобы автозагрузчик zend был включен, пока вы регистрируете обратный вызов автозагрузки с помощью spl_autoload_register (), поэтому он добавляется в стек автозагрузки.

Используя spl_autoload_register, все вызовы будут вызваны, чтобы попытаться удовлетворить запрос. Я не знаю, будет ли цепочка прервана после успешного завершения обратного вызова. Если это так, то, вероятно, контролируется возвратом true или false в обратных вызовах.

Я бы предложил использовать метод «push autoloader» для Autoloader, который может получить другой экземпляр автозагрузчика и вызвать его при совпадении пространств имен. Поэтому вы можете использовать свой автозагрузчик вместе с zend's …