Я изучаю преимущества Zend_Config_Ini и использует простой файл констант.
например –
define('DB_HOST',localhost); //versus $config = new Zend_Config_Ini('/path/to/config.ini', 'staging'); echo $config->database->params->host; // prints "dev.example.com"
Единственное, что $ config не является глобально доступным. Итак, вам нужно использовать Zend_Registry для хранения приложений, без необходимости запускать каждый раз.
Это, кажется, добавляет больше сложности, чем нужно …. Я что-то упустил или Zend_Config + Zend_Registry – это метод, который лучше в долгосрочной перспективе по мере того, как приложение растет?
Основное преимущество использования реестра с конфигурацией – исключить загрязнение глобального пространства имен. Скажем, вы хотите включить стороннюю библиотеку lib и ваше приложение, а lib и определяют постоянный DB_HOST. Не хорошо.
Кроме того, многие фабрики в Zend Framework используют объект конфигурации для создания экземпляров. Zend_Db
– хороший пример этого. Вы просто передаете ему эту $this->database
и для ее адаптации потребуется то, что нужно для создания вашего адаптера.
Вы также можете расширить реестр с помощью настраиваемых функций, например, методов поиска или таких вещей. Проверьте описание шаблона Fowler.
Хорошим преимуществом Zend_Config
является то, что вы не зависите от «файла исходного кода PHP»; только файл .ini сделает – и некоторые предпочитают модифицировать .ini-файл вместо PHP.
И проще программно изменить файл .ini / XML – для этого есть классы / функции!
С .ini-файлами и Zend_Config
вас также есть хорошие функциональные возможности, которые уже предоставлены; например, наследование между разделами (т. е. вы можете иметь «общий» раздел и «постановку» и «производство», которые перезаписывают некоторые значения)
Вещь, которая может быть связана с Zend_Config
, тоже согласуется: Zend Framework с Zend_Application
уже предполагает, что у вас будет один файл конфигурации; так почему же не второй? Или даже повторное использование первого?
И то же самое с несколькими классами Framework, которые могут работать или быть настроены с экземпляром Zend_Config
; если у вас уже есть этот, это становится проще 😉
Если бы мне пришлось выбирать между файлом PHP с параметрами и файлом .ini, для вещей, которые можно настроить, я бы, вероятно, пошел с .ini-файлом (и Zend_Config
+ Zend_Registry
при необходимости) .
Да, вы правы, использование сандазованного метода Zend для конфигурации сложнее, чем определение серии глобальных констант. Преимущества, которые вы получаете
Если вам когда-либо понадобится интегрировать приложение в другой проект, наличие глобальных констант, представляющих конфигурацию вашего приложения, может вызвать проблемы. Каковы шансы, что у другого проекта есть константа с именем DB_HOST
? Как разработчик, использующий вашу гибридную систему, сообщает, какие константы являются конфигурацией вашего приложения и интегрированным приложением?
Итак, у вас есть один файл со всеми вашими значениями конфигурации. Как вы собираетесь развертывать это в разных средах? (производство, постановка и т. д.) Скорее всего, вы умный человек, который может придумать решение, но как другой разработчик входит в ваш проект, чтобы узнать, как это решение работает? Как другие модули вашего приложения будут знать, как читать вашу глобальную конфигурацию?
Zend_Config
уже «решил» многие проблемы. Если вы немного усложняете и абстрагируете, вы получаете известный путь вперед и можете потратить больше времени на решение проблем своего приложения, вместо того, чтобы изобретать и поддерживать еще одну систему конфигурации.