| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect1 id="zend.config.theory_of_operation">
- <title>Теоретические основы работы с Zend_Config</title>
- <para>
- Конфигурационные данные передаются конструктору <classname>Zend_Config</classname>
- в виде ассоциативного массива, который может быть многомерным, что
- дает возможность организовывать данные от общего к частному. Классы
- адаптеров преобразуют конфигурационные данные из хранилища в
- ассоциативный массив для конструктора <classname>Zend_Config</classname>.
- Можно также передавать массивы непосредственно конструктору
- <classname>Zend_Config</classname>
- без использования класса адаптера, т.к. это может быть наиболее
- подходящим решением в некоторых ситуациях.
- </para>
- <para>
- Каждое значение массива конфигурационных значений становится свойством
- объекта <classname>Zend_Config</classname>. Ключ массива используется как имя
- свойства. Если значение само является массивом, то соответствующее
- свойство создается как объект <classname>Zend_Config</classname>, который
- заполняется данными этого массива. Это производится рекурсивно, т.о.,
- иерархия конфигурационных данных может иметь любой уровень вложенности.
- </para>
- <para>
- <classname>Zend_Config</classname> реализует интерфейсы <emphasis>Countable</emphasis>
- и <emphasis>Iterator</emphasis> для того, чтобы обеспечить простой доступ
- к конфигурационным данным. Поэтому с объектами
- <classname>Zend_Config</classname> можно использовать функцию
- <ulink url="http://php.net/count"><methodname>count()</methodname></ulink> и
- такие конструкции языка <acronym>PHP</acronym>, как
- <ulink url="http://php.net/foreach"><emphasis>foreach</emphasis></ulink>.
- </para>
- <para>
- По умолчанию через <classname>Zend_Config</classname> конфигурационные данные
- доступны только для чтения, и операция присваивания (например,
- <command>$config->database->host = 'example.com'</command>)
- вызовет исключение. Тем не менее, это поведение
- может быть отменено при вызове конструктора, и тогда
- можно будет изменять конфигурационные данные.
- Если модификации разрешены, то <classname>Zend_Config</classname> также
- поддерживает уничтожение значений
- (т.е. <methodname>unset($config->database->host)</methodname>).
- Метод <methodname>readOnly()</methodname> может использоваться для определения того,
- был ли разрешены модификации в данном объекте <classname>Zend_Config</classname>.
- Метод <methodname>setReadOnly()</methodname> запрещает все дальнейшие изменения в
- объекте <classname>Zend_Config</classname>, который был создан с разрешением
- изменений.
- </para>
- <note>
- <para>
- Важно не путать изменение данных в памяти с сохранением
- конфигурационных данных на физическом носителе данных. Создание
- и изменение конфигурационных данных на различных
- носителях данных не входит в сферу назначений <classname>Zend_Config</classname>.
- Для создания и изменения конфигурационных данных на различных
- носителях информации можно использовать
- сторонние разработки с открытым исходным кодом.
- </para>
- </note>
- <para>
- Классы адаптеров наследуют от класса <classname>Zend_Config</classname>,
- и, следовательно, имеют тот же функционал.
- </para>
- <para>
- Семейство классов <classname>Zend_Config</classname> позволяет
- организовывать конфигурационные данные, разбивая их на разделы.
- В объекты адаптеров <classname>Zend_Config</classname> можно загружать
- один определенный раздел, несколько разделов или все разделы
- данных (если не указан раздел).
- </para>
- <para>
- Классы адаптеров <classname>Zend_Config</classname> поддерживают единую модель
- наследования, которая позволяет одному разделу наследовать
- конфигурационные данные из другого. Это сделано для того, чтобы
- уменьшить или устранить необходимость дублирования конфигурационных
- данных разного назначения. Наследующий раздел может замещать данные,
- унаследованные от родительского раздела. Как и при наследовании классов PHP,
- раздел может наследовать от родительского раздела, который в свою очередь
- наследует от другого и т.д., но множественное наследование (т.е. раздел
- C наследует напрямую от разделов A и B) не поддерживается.
- </para>
- <para>
- Если вы имеете два объекта <classname>Zend_Config</classname>, то можете объединить
- их в один, используя функцию <methodname>merge()</methodname>. Например, имея
- <varname>$config</varname> и <varname>$localConfig</varname> вы можете объединить
- данные из <varname>$localConfig</varname> с данными из <varname>$config</varname>,
- используя <methodname>$config->merge($localConfig)</methodname>. Элементы
- из <varname>$localConfig</varname> при совпадении имен заменят собой элементы
- <varname>$config</varname>.
- </para>
- <note>
- <para>
- Объект <classname>Zend_Config</classname>, который выполняет объединение,
- должен быть создан с разрешением модификаций путем передачи
- <constant>TRUE</constant> в качестве второго параметра конструктора.
- После того, как объединение будет завершено, можно использовать
- метод <methodname>setReadOnly()</methodname> для предотвращения всех
- дальнейших изменений.
- </para>
- </note>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|