Отправляет email-рассылки с помощью сервиса Sendsay

PHP 5: Новые возможности.

  Все выпуски  

ZEND FRAMEWORK: Базовые классы


PHP 5: Новые возможности.

В предлагаемом материале изучаются базовые классы Zend Framework и ряд их статических методов. Особое внимание уделено особенностям использования этих методов, их преимуществам и ситуациям, в которых эти преимущества наиболее заметны.

Ранние версии Zend_Framework включали в себя класс Zend, который служил как бы фундаментом для всего проекта. Класс содержал только статические методы, которые были востребованы многими другими классами проекта. Тем самым был воплощен принцип «Не повторяйся» (Don't Repeat Yourself, или просто DRY), ставший девизом Zend Framework.

Начиная с версии Zend Framework 0.9.0, класс Zend был объявлен нежелательным (deprecated). Его заменила целая вереница относительно простых классов, которые мы и рассмотрим в этой главе.

Статический метод Zend_Debug::dump() выводит и/или возвращает информацию о выражении (Пример 7.1, «Использование метода Zend_Debug::dump()»). Он является оболочкой к стандартной функции PHP var_dump(). В отличие от последней, обрамляет вывод тегом <pre> (это преимущество становится заметным при инспекции составных типов - массивов и объектов) и может предварять его необязательным заголовком.

dump($var,
$label=null,
$echo=true);

Аргумент $var предсталяет собой то выражение или переменную, информация о которой запрашивается.

Необязательный текстовый аргумент $label, если задан, выводится в виде заголовка перед информацией об инспектируемом выражении.

[Подсказка]Подсказка

Использование заголовков особенно удобно в тех случаях, когда выводится информация о нескольких выражениях подряд.

Наконец, необязательный логический аргумент $echo управляет выводом информации. Если он равен true, информация будет выведена (echo), в противном случае - только возвращена (return).

[Замечание]Замечание

Возврат информации методом производится всегда, независимо от значения аргумента $echo.


Класс Zend_Loader включает методы, помогающие осуществлять динамическую загрузку файлов.

[Подсказка]Подсказка

Методы класса Zend_Loader обладают преимуществом по сравнению с традиционными функциями PHP (например, require_once()) в том случае, если в качестве имени файла используется переменная. При использовании констант никаких особых преимуществ нет.

Статический метод Zend_Loader::isReadable() проверяет «читабельность» файла и возвращает true, если файл может быть прочитан, и false в противном случае (Пример 7.2, «Использование метода Zend_Loader::isReadable()»).

isReadable($filename);

Аргумент $filename содержит название файла, подлежащего проверке, и может включать в себя путь к этому файлу.

Метод служит оболочкой для стандартной функции PHP is_readable(), но, в отличие от последней, ищет файлы в директориях, заданных в директиве include_path.


Статический метод Zend_Loader::loadFile() загружает PHP файл и является оболочкой для функции include(). Включаемый файл может содержать любой PHP код. В случае неудачи генерируется исключительная ситуация Zend_Exception.

loadFile($filename,
$dirs=null,
$once=false)
throws Zend_Exception;

Строковый аргумент $filename задает название загружаемого файла. Из соображений безопасности включать сюда путь к файлу нельзя (для этого служит следующий аргумент), разрешаются только буквенно-цифровые символы, черточка (-), знак подчеркивания (_) и точка (.).

Необязательный смешанный аргумент $dirs, если задан, определяет путь или пути для поиска включаемых файлов, которые будут использованы до обработки директивы include_path. Путь к единственной дополнительной директории задается в виде строки; ко множественным директориям - в виде массива. По умолчанию поиск производится только в директориях, заданных в include_path.

Необязательный логический аргумент $once определяет, будет ли использована для включения файла функция include() или include_once();.

[Внимание]Внимание

Следует помнить, что загружаемые таким образом файлы обладают своим собственным пространством имен, т. е. объявленные в загружаемом файле переменные не видны из загружающего файла (Пример 7.3, «Особенности использования метода Zend_Loader::loadFile()»). При обычном же включении файла пространство имен является общим для обоих файлов. Игнорирование данного обстоятельства способно привести к возникновению ошибок, которые может быть трудно локализовать.


Метод Zend_Loader::loadClass() загружает файл с названием, производным от заданного названия класса, и проверяет наличие этого класса в файле (Пример 7.4, «Использование метода Zend_Loader::loadClass()»). Для непосредственной загрузки используется метод Zend_Loader::loadFile() (см. «Метод Zend_Loader::loadFile()»). В случае неудачи генерируется исключительная ситуация Zend_Exception.

loadClass($class,
$dirs=null)
throws Zend_Exception;

Аргумент $class задает название класса и, одновременно, название файла, который должен быть загружен ($class.php).

[Замечание]Замечание

Если второй аргумент ($dirs) не задан (по умолчанию), а в названии класса содержатся знаки подчеркивания (_), то они транслируются методом в разделители директорий (DIRECTORY_SEPARATOR), а само название, таким образом, - в путь к файлу; например: Zend_Foo_Class преобразуется в Zend/Foo/Class.php.

Необязательный аргумент $dirs задает директорию (строка) или директории (массив) для поиска загружаемого файла и в неизмененном виде передается методу Zend_Loader::loadFile() (см. «Метод Zend_Loader::loadFile()»).


[Подсказка]Подсказка

Метод Zend_Loader::loadClass() может быть с успехом использован в магической функции автозагрузки классов __autoload().

Регистр - это контейнер для хранения объектов и величин в пространстве имен приложения. Этот механизм является альтернативой использования глобального пространства имен. Работа с регистром осуществляется при помощи статических методов класса Zend_Registry (Пример 7.5, «Использование хранилища объектов»). Также возможен доступ к элементам регистра подобно тому, как это делается по отношению к элементам массива (Пример 7.6, «Перебор элементов регистра»).

Статический метод Zend_Registry::set() устанавливает объект в хранилище объектов (Пример 7.5, «Использование хранилища объектов»).

set($index,
$value);

Скалярный аргумент $index может быть либо целым числом, либо строкой (как и индекс массива).

Аргумент $value представляет собой сохраняемый объект, массив или скаляр.

Повторный вызов метода Zend_Registry::set() с тем же индексом позволяет изменить значение сохраненной величины.

Статический метод Zend_Registry::get() возвращает объект с заданным именем из хранилища объектов (Пример 7.5, «Использование хранилища объектов»).

get($index)
throws Zend_Exception;

Аргумент $index задает индекс объекта в хранилище.

Попытка извлечь ссылку на объект с несуществующим индексом приведет к возникновению исключительной ситуации.


[Подсказка]Подсказка

Для простой проверки, был ли сохранен объект в хранилище, рекомендуется использовать более быстрый метод Zend_Registry::isRegistered().

<?php

if (Zend_Registry::isRegistered($index)) {
    $value = Zend_Registry::get($index);
}
                

С помощью статического метода Zend_Registry::getInstance() можно получить экземпляр регистра и затем работать с ним как с обычным объектом или ассоциативным массивом. При этом хранящиеся в регистре величины выступают в качестве свойств объекта или элементов массива соответственно.


Класс Zend входил в состав ранних версий Zend_Framework, но, начиная с версии 0.9.0, был объявлен нежелательным для использования. Ему на смену пришли только что рассмотренные в этой главе классы. Однако, с целью облегчить обновление до новых стандартов уже существующих проектов, приведем краткое описание статических методов класса Zend и соответствующих им методов новых классов.

Метод Zend::dump(). Нежелателен, начиная с версии Zend Framework 0.9.0. Выводит и/или возвращает информацию о выражении. Следует использовать статический метод Zend_Debug::dump() (см. «Метод Zend_Debug::dump()»).

Метод Zend::isReadable. Нежелателен, начиная с версии Zend Framework 0.9.0. Проверяет читабельность файла. Следует использовать статический метод Zend_Loader::isReadable() (см. «Метод Zend_Loader::isReadable()»).

Метод Zend::loadFile(). Нежелателен, начиная с версии Zend Framework 0.9.0. Включает PHP файл. Следует использовать статический метод Zend_Loader::loadFile() (см. «Метод Zend_Loader::loadFile()»).

Метод Zend::loadClass(). Нежелателен, начиная с версии Zend Framework 0.9.0. Загружает файл с названием, производным от заданного названия класса, и проверяет наличие этого класса в файле. Следует использовать статический метод Zend_Loader::loadClass() (см. «Метод Zend_Loader::loadClass()»).

Метод Zend::loadInterface(). Нежелателен, начиная с версии Zend Framework 0.6.0. Загружает файл с названием, производным от заданного названия интерфейса, и проверяет наличие этого интерфейса в файле. Следует использовать статический метод Zend_Loader::loadClass() (см. «Метод Zend_Loader::loadClass()»).

Метод Zend::register(). Нежелателен, начиная с версии Zend Framework 0.9.0. Регистрирует объект в хранилище объектов. Следует использовать статический метод Zend_Registry::set() (см. «Метод Zend_Registry::set()»).

Метод Zend::registry(). Нежелателен, начиная с версии Zend Framework 0.9.0. Возвращает объект с заданным именем или список всех объектов в хранилище. Следует использовать статический метод Zend_Registry::get() (см. «Метод Zend_Registry::get()»).

Метод Zend::isRegistered(). Нежелателен, начиная с версии Zend Framework 0.9.0. Проверяет, был ли сохранен объект в хранилище. Следует использовать статический метод Zend_Registry::isRegistered() (см. Подсказка).

Метод Zend::exception(). Нежелателен, начиная с версии Zend Framework 0.6.1. Используется для так называемой «ленивой» инициализации класса исключительной ситуации.

Константа Zend::VERSION. Нежелательна, начиная с версии Zend Framework 0.9.0. Следует использовать константу Zend_Version::VERSION (см. «Константа Zend_Version::VERSION»).

Created with DocBook


В избранное