Глава 5. Zend_Config

5.1. Введение

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

Пример 5.1. Использование Zend_Config без адаптеров

Обычно предполагается, что используется один из классов адаптеров, например, Zend_Config_Ini или Zend_Config_Xml. Но если конфигурационные данные доступны в виде массива PHP, то можно просто передавать эти данные конструктору Zend_Config, чтобы использовать преимущества простого объектно-ориентированного интерфейса.

<?php
// Массив конфигурационных данных
$configArray = array(
    'webhost'  => 'www.example.com',
    'database' => array(
        'adapter' => 'pdo_mysql',
        'params'  => array(
            'host'     => 'db.example.com',
            'username' => 'dbuser',
            'password' => 'secret',
            'dbname'   => 'mydatabase'
        )
    )
);

// Создание объектно-ориентированной обертки для конфигурационных данных
require_once 'Zend/Config.php';
$config = new Zend_Config($configArray);

// Вывод элемента конфигурационных данных (результатом будет 'www.example.com')
echo $config->webhost;

// Использование конфигурационных данных для соединения с базой данных
$db = Zend_Db::factory($config->database->adapter,
                       $config->database->params->toArray());
$db = Zend_Db::factory($config->database->adapter,
                       $config->database->params->toArray());

// Альтернативный способ - просто передавайте объект Zend_Config.
// Фабрика Zend_Db знает, как его интерпретировать.
$db = Zend_Db::factory($config->database);
        

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

Кроме объектно-ориентированного доступа к значениям данных, Zend_Config также предоставляет метод get(), который будет возвращать значение по умолчанию, если элемент данных не существует. Например:

<?php
$host = $config->database->get('host', 'localhost');
    

Пример 5.2. Использование Zend_Config с конфигурационным файлом PHP

Часто требуется использовать конфигурационный файл, основанный на "чистом" PHP. Следующий код показывает, как просто этого достичь.

<?php
// config.php
return array(
    'webhost'  => 'www.example.com',
    'database' => array(
        'adapter' => 'pdo_mysql',
        'params'  => array(
            'host'     => 'db.example.com',
            'username' => 'dbuser',
            'password' => 'secret',
            'dbname'   => 'mydatabase'
        )
    )
);
<?php
// Использование конфигурации
require_once 'Zend/Config.php';
$config = new Zend_Config(require 'config.php');

// Вывод элемента конфигурационных данных (результатом будет 'www.example.com')
echo $config->webhost;

    Поддержать сайт на родительском проекте КГБ