Я бы не стал использовать ни Zend_Registry, ни константы по двум причинам.
- В реестре никогда не знаешь, что случилось с переменными. Каждая часть приложения может изменить их, и вы не будете замечены. На самом деле я вижу реестр как антипаттерн.
- Константы излишне загрязняют ваше приложение. Что если использовать для каждой конфигурации какую-то константу? Вы должны хранить дополнительный документ со всеми определенными константами, это ужасно поддерживать.
Наилучший вариант — напрямую получить объект конфигурации из файла bootstrap. В следующих примерах я предполагаю, что у вас есть это в вашем application.ini:
someservice.apikey = 12345678
someservice.passkey = 87654321
Начальная загрузка устанавливается как параметр в файле frontController. Если у вас есть контроллер действий, это делает его таким простым:
$serviceOptions = $this->getInvokeArg('bootstrap')->getOption('someservice');
Если у вас есть служба, созданная в вашем контроллере, теперь вы можете передать ее через конструктор и/или сеттер.
Если вы хотите получить параметры не внутри вашего контроллера, а где-то еще, вы можете использовать шаблон singleton, который реализует frontController. Итак, в любом месте (конечно, только во время отправки, а не во время начальной загрузки) вы можете сделать это:
$frontController = Zend_Controller_Front::getInstance();
$serviceOptions = $frontController->getParam('bootstrap')
->getOption('someservice');
С помощью вышеуказанного метода вы в безопасности, у вас всегда есть правильный вариант конфигурации, а не какой-то, возможно, мутированный.
17.10.2011