Zend Framework 101: Zend_Registry


Доступ к реестру
Рассмотрим ключевые моменты работы с  статическим реестром: запись, чтение, проверка на существование.

Запись в реестр
Чтобы добавить переменную в статический реестр используется статический метод 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().

<?php
require_once('Zend/Registry.php');
 
$registry = Zend_Registry::getInstance();
 
$registry['name'] = 'Quentin Zervaas';
 
echo sprintf('My name is %s', $registry['name']);
?>
 

 

Пример работы с 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() мы получаем доступ к соединению через объект реестра.


 

Добавить комментарий


Защитный код
Обновить

Разработчику

Скрипты