Доступ к реестру
Рассмотрим ключевые моменты работы с статическим реестром: запись, чтение, проверка на существование.
Запись в реестр
Чтобы добавить переменную в статический реестр используется статический метод Zend_Registry::set(). В качестве параметров данного метода могут выступать два аргумента: имя элемента (переменной) и значение, сохраняемое в реестре. На практике все выглядит так:
<?php
require_once('Zend/Registry.php');
$name = 'Quentin Zervaas';
Zend_Registry::set('name', $name);
?>
Допустимо записывать сразу несколько объектов (несколько переменных).
Проверка на существование объекта
Для того чтобы проверить наличие какого-либо элемента в реестре, используется метод Zend_Registry::get(). Этот метод в качестве параметра принимает имя проверяемой переменной. Если переменная не существует, результат поиска – исключительная ситуация. Возможность перехвата и обработки исключительных ситуаций - неплохая альтернатива isRegistered().
Код, приведенный ниже, демонстрирует процедуру поиска переменной и обработку исключительной ситуации в случае, если такая переменная не существует в статическом реестре.
<?php
require_once('Zend/Registry.php');
try {
$name = Zend_Registry::get('name');
}
catch (Exception $ex) {
//элемент 'name' не существует
}
?>
Обращение к реестру через синтаксис массивов
По причине того что Zend_Registry наследует ArrayObject класс, появляется возможность доступа к реестру (чтение/запись) как к обычному массиву.
Данная возможность особенно полезна, если вам требуется выполнить сразу несколько операций с реестром в блоке кода.
Для доступа к реестру через синтаксис массивов, в первую очередь нужно загрузить Zend_Registry вызвав метод Zend_Registry::getInstance().
Пример работы с Zend_Registry
До текущего момента возможно еще не до конца было понятно, в чем же собственно польза от использования Zend_Registry. Давай напишем сценарий который будет реализовывать возможность доступа к глобальным объектам из любого места вашего приложения.
Например, ваше приложение работает с базой данных. Скрипт будет создавать соединение к БД и выполнять простой SQL запрос.
Обычно в приложениях работающих с базой могло быть много классов, которые использовали соединение к БД. В результате создавались лишние классы и функции, или даже отдельные скрипты, которые связывали все воедино, реализуя возможность работы с одним и тем же соединением для методов из разных классов. В результате появлялось много «лишнего» кода. Получить доступ к соединению через реестр на много проще, а так же это сильно упрощает код и делает структуру вашего приложения менее запутанной.
<?php
require_once('Zend/Registry.php');
require_once('Zend/Db.php');
Zend_Registry::set('db', Zend_Db::factory());
class User
{
public static function create($name)
{
$values = array(
'name' => $name
);
$db = Zend_Registry::get('db');
$db->insert('users', $values);
}
}
User::create('Quentin Zervaas');
?>
Таким образом, просто вызвав метод User::create() мы получаем доступ к соединению через объект реестра.





