Глава 3. Zend_Config
Пред. |  | След.

## Глава 3. Zend_Config

## 3.1. Введение

`Zend_Config` разработан для упрощения использования конфигурационных данных для веб-приложений. Он предоставляет основанный на свойствах объектов интерфейс для чтения конфигурационных данных из различных носителей данных, поддерживающих иерархическое хранение данных. Сейчас `Zend_Config` предоставляет вспомогательные классы для конфигурационных данных, хранящихся в текстовых файлах: `Zend_Config_Array`, `Zend_Config_Ini` и `Zend_Config_Xml`.

`Zend_Config` поддерживает единую модель наследования, которая делает возможным наследование конфигурационных данных из одного раздела в другой. Хотя `Zend_Config` поддерживает наследование деревьев произвольной глубины, раздел конфигурационных данных может наследовать только из одного родительского раздела.

Внутри `Zend_Config` реализует интерфейсы Countable и Iterator для того, чтобы обеспечить легкий доступ к конфигурационным данным. Данные сделаны доступными в `Zend_Config` через ассоциативный массив, который может быть многоуровневым. Вспомогательный класс, такой, как `Zend_Config_Ini` обычно предоставляет этот массив в `Zend_Config`, но интерфейс не требует следования этому соглашению.

| Замечание
Хотя `Zend_Config` позволяет производить изменение загруженных конфигурационных данных "в памяти", это не рассчитано для сохранения конфигурационных данных на конкретный носиель данных. Инструменты для создания и изменения конфигурационных данных для конкретных носителей данных в настоящее время не входят в сферу Zend Framework. Сторонние разработки с открытым кодом часто подходят в целях создания и изменения конфигурационных данных для различных носителей данных.

Пример 3.1. Загрузка конфигурационных данных из файла INI

В данном примере конфигурационные данные для производственной среды загружаются из файла INI с помощью `Zend_Config_Ini`:

    <?php
    require_once 'Zend/Config.php';
    require_once 'Zend/Config/Ini.php';
    $config = new Zend_Config(Zend_Config_Ini::load('/path/to/config.ini', 'production'));
    ?>

Теперь конфигурационные данные доступны из свойств объекта `$config`. Предположим, что конфигурационные данные содержат параметры соединения с базой данных и что эти данные хранятся в файле INI в следующем виде:

    [production]
    database.type     = pdo_mysql
    database.host     = db.example.com
    database.username = dbuser
    database.password = secret
    database.name     = dbname

Приложение может установить соединение с базой данных следующим образом:

    <?php
    $myApplicationObject->databaseConnect($config->database->type,
                                          $config->database->host,
                                          $config->database->username,
                                          $config->database->password,
                                          $config->database->name);
    ?>

Как показано выше, конфигурационные данные доступны через синтаксис свойств объектов.

Мы также можем легко создать класс, наследующий от `Zend_Config` для различных целей. Здесь приведен класс-наследник, добавляющий публичный метод `dump()` для быстрого вывода загруженных конфигурационных данных.

    <?php
    class MyConfig extends Zend_Config
    {
        protected $_indent;

        public function dump()
        {
            $this->_indent = 0;
            echo "<pre>\n";
            $this->_dumpRecursor($this);
            echo "</pre>";
        }

        protected function _dumpRecursor($config)
        {
            foreach ($config as $key => $value) {
                echo str_repeat("    ", $this->_indent) . "$key =>";
                if ($value instanceof Zend_Config) {
                    echo "\n";
                    $this->_indent++;
                    $this->_dumpRecursor($value);
                    $this->_indent--;
                } else {
                    echo " $value\n";
                }
            }
        }
    }

    $config = new MyConfig(Zend_Config_Ini::load('/path/to/config.ini', 'production'));

    $config->dump();
    ?>

Для конфигурационных данных в приведенном выше примере, это должно вывести:

    <pre>
    database =>
        type => pdo_mysql
        host => db.example.com
        username => dbuser
        password => secret
        name => dbname
    </pre>

Пред. |  | След.
2.4. Бэкэнды Zend_Cache | Начало | 3.2. Zend_Config_Array