1.10. Zend::initRegistry($registry = 'Zend_Registry')

Разработчики, желающие расширить существующие функциональные возможности реестра, могут использовать данную функцию. Этот метод позволяет создавать подклассы Zend_Registry, включая добавление методов-псевдонимов для offsetGet() и offsetExists(), таких, как has(), getval(), setval() и т.д. Для их использования следует создать экземпляр подкласса Zend_Registry в коде загрузки и затем передать его initRegistry() до того, как будут вызваны другие методы, связанные с использованием реестра. Следует иметь в виду, что initRegistry() может вызываться только один раз для предотвращения случайной перезаписи реестра после инициализации. Также при использовании Zend::registry() или Zend::register() будет автоматически вызван метод initRegistry(), если он не был вызван ранее.

Пример 1.5. register() / offsetSet() Example

<?php
class Zend_RegistryMine extends Zend_Registry
{
    public function getval($index)
    {
        return $this->offsetGet($index);
    }
}

# в коде загрузки:

$ini_array = parse_ini_file('your_stuff.ini'); // необязательный код
$registry = new Zend_RegistryMine($ini_array);
Zend::initRegistry($registry);

# теперь методы Zend::registry(), Zend::register(), and Zend::isRegistered()
# работают так, как нужно нам
?>

Используйте константу ArrayObject::ARRAY_AS_PROPS в конструкторе для того, чтобы получать доступ к значениям, используя конструкцию $registry->$indexName в дополнение к конструкции $registry[$indexName]. Однако остерегайтесь конфликтов имен, если создаете наследников класса Zend_Registry с добавлением закрытых переменных.

Пример 1.6. Доступ к значениям с использованием объектно-ориентированной нотации вместо нотации доступа к массиву

<?php
$registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS); 
Zend::initRegistry($registry);
?>