Как отключить 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 …