Глава 3. Zend_Config

Содержание

3.1. Введение
3.2. Zend_Config_Array
3.2.1. Введение
3.3. Zend_Config_Ini
3.3.1. Введение
3.4. Zend_Config_Xml
3.4.1. Введение

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>