PHP Zend Framework – Zend_Config и глобальное состояние

Я изучаю преимущества 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 – это метод, который лучше в долгосрочной перспективе по мере того, как приложение растет?

Solutions Collecting From Web of "PHP Zend Framework – Zend_Config и глобальное состояние"

Основное преимущество использования реестра с конфигурацией – исключить загрязнение глобального пространства имен. Скажем, вы хотите включить стороннюю библиотеку 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 уже «решил» многие проблемы. Если вы немного усложняете и абстрагируете, вы получаете известный путь вперед и можете потратить больше времени на решение проблем своего приложения, вместо того, чтобы изобретать и поддерживать еще одну систему конфигурации.