Programmer's Reference Guide

Zend_Loader

Динамическая загрузка файлов и классов

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

Подсказка

Zend_Loader vs. require_once()

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

Загрузка файлов

Статический метод Zend_Loader::loadFile() загружает файл PHP. Загружаемый файл должен содержать код PHP. Метод является оберткой к PHP-функции » include(). Этот метод бросает исключение Zend_Exception в случае неуспеха - например, если требуемый файл не существует.

Пример #1 Пример использования метода loadFile()

<?php

Zend_Loader::loadFile($filename, $dirs=null, $once=false)

?>

Аргумент $filename задает имя файла для загрузки, оно не должно содержать пути к файлу. В целях безопасности производится проверка $filename. $filename должен содержать только алфавитно-цифровые символы, тире ("-"), знак подчеркивания ("_") и точку ("."). На аргумент $dirs эти ограничения не распространяются.

$dirs задает директории для поиска файла. Если он равен NULL, то для поиска используется только include_path. Если он является строкой или массивом, то файл сначала ищется в данной директории (директориях) и затем в include_path.

Аргумент $once является значением булевого типа. Если равен TRUE, то Zend_Loader::loadFile() для загрузки файла использует PHP-функцию » include_once(), иначе используется функция » include().

Загрузка классов

Статический метод Zend_Loader::loadClass($class, $dirs) загружает файл PHP и затем проверяет наличие требуемого класса.

Пример #2 Пример использования метода loadClass()

<?php

Zend_Loader::loadClass('Container_Tree',
    array(
        '/home/production/mylib',
        '/home/production/myapp'
    )
);

?>

Строка, задающая класс, преобразуется в относительный путь посредством замены знаков подчеркивания разделителями директорий и добавления расширения '.php' в конец. В примере выше 'Container_Tree' преобразуется в 'Container/Tree.php'.

Если $dirs является строкой или массивом, то Zend_Loader::loadClass() ищет в директориях в том порядке, в котором они были определены. Загружается первый найденный файл. Если файл не найден в директориях $dirs, то производится поиск в include_path.

Если файл не найден или класс не существует после загрузки, то Zend_Loader::loadClass() бросает исключениеZend_Exception.

Для загрузки используется метод Zend_Loader::loadFile(), поэтому имя класса должно содержать только алфавитно-цпфровые символы, тире ('-'), знак подчеркивания ('_') и точку ('.').

Проверка, является ли файл доступным для чтения

Статический метод Zend_Loader::isReadable($pathname) возвращает TRUE, если по заданному пути существует файл и он доступен для чтения, иначе возвращается FALSE.

Пример #3 Пример использования метода isReadable()

<?php

if (Zend_Loader::isReadable($filename)) {
    // делаем что-либо с файлом $filename
}

?>

Аргумент $filename задает имя файла для проверки. Он может содержать путь к файлу. Этот метод является оберкой к PHP-функции » is_readable(). Эта функция не производит поиск в include_path, в то время как метод Zend_Loader::isReadable() производит.

Использование автозагрузчика

Класс Zend_Loader содержит метод, который вы можете регистрировать через автозагрузчик PHP SPL. Zend_Loader::autoload() является методом обратного вызова. Для удобства Zend_Loader предоставляет метод registerAutoload() для регистрации своего метода autoload(). Если в среде PHP отсутствует расширение spl_autoload, то метод registerAutoload() бросает исключение Zend_Exception.

Пример #4 Пример регистрации метода обратного вызова автозагрузки

<?php

Zend_Loader::registerAutoload();

?>

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

Если вы расширили класс Zend_Loader, то можете передать опциональный аргумент методу registerAutoload(), чтобы определить класс, из которого следует регистрировать метод autoload().

Пример #5 Пример регистрации метода автозагрузки из расширенного класса

<?php

class My_Loader extends Zend_Loader
{
    // реализация собственного функционала
}

Zend_Loader::registerAutoload('My_Loader');

?>

Zend_Loader
blog comments powered by Disqus

Select a Version

Languages Available

Components

Search the Manual