Содержание
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>