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

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

  Все выпуски  

ZEND FRAMEWORK: Класс Zend


Исправление

К сожалению, в выпуске рассылки от 06.10.2006 "ZEND FRAMEWORK: Стандарты кодирования" была допущена досадная ошибка, касающаяся расположения фигурных скобок, обрамляющих тело класса, в пакетах PEAR. Утверждалось, что открывающая фигурная скобка должна находиться на одной строке с названием класса. На самом деле, стандарты кодирования PEAR в этом вопросе полностью совпадают со стандартами Zend Framework.

Исправленная версия находится на сайте рассылки (http://pterodactyl.l2p.net/book/zfintro/page/ch05.html).

Автор рассылки приносит свои извинения читателям в связи с доставленными неудобствами.

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

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

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

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

Статические методы вызываются непосредственно, без создания нового объекта, по следующему шаблону.

Zend::method([parameters]);

Естественно, сам класс Zend к моменту вызова статического метода должен быть уже доступен (см. Глава 4, Быстрый старт). В частности, во всех последующих примерах предполагается, что поиск включаемых файлов производится, в том числе, и в директории, где расположена библиотека классов Zend Framework.

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


Метод Zend::loadClass() загружает файл с названием, производным от заданного названия класса, и проверяет наличие этого класса в файле. Для непосредственной загрузки используется метод Zend::loadFile() (см. «Метод Zend::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::loadFile() (см. «Метод Zend::loadFile()»).

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

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

Метод Zend::loadInterface() загружает файл с названием, производным от заданного названия интерфейса, и проверяет наличие этого интерфейса в файле.

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

Этот метод во всем повторяет метод Zend::loadClass() (см. «Метод Zend::loadClass()»), за исключением того, что с его помощью загружается не класс, а интерфейс. Необходимость в специальном методе для загрузки интерфейса обусловлена тем, что функция class_exists(), используемая в методе Zend::loadClass() для проверки существования класса, не проверяет интерфейсы (это делает функция interface_exists()).

loadInterface($interface,
$dirs=null)
throws Zend_Exception;

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

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

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

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

Метод Zend::register() регистрирует объект в хранилище объектов (Пример 7.3, «Использование хранилища объектов»).

register($name,
$object)
throws Zend_Exception;

Строковый аргумент $name задает название объекта в хранилище. По этому имени объект в последующем может быть найден в хранилище при помощи метода Zend::registry() (см. «Метод Zend::registry()»).

Аргумент $object представляет собой указатель (handler) на сохраняемый объект.

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

Метод Zend::registry() возвращает объект с заданным именем или список всех объектов в хранилище (Пример 7.3, «Использование хранилища объектов»).

registry($name=null)
throws Zend_Exception;

Необязательный строковый аргумент $name задает имя объекта, ссылку (handler) на который необходимо извлечь из хранилища. Если он не задан (по умолчнию), будет возвращен полный список сохраненных объектов. Попытка извлечь ссылку на объект с несуществующим именем приведет к возникновению исключительной ситуации.


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

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

Created with DocBook


В избранное