Содержание
Класс Zend_Loader включает в себя методы, помогающие производить динамическую загрузку файлов.
![]() |
Zend_Loader vs. require_once() |
|---|---|
Методы Zend_Loader лучше всего использовать, если имя файла,
которого нужно загрузить, является переменным - например, основано
на вводе пользователя или аргументе метода. Если вы загружаете файл
или класс, чье имя является константой, то использование Zend_Loader
не дает каких-либо преимуществ по сравнению использованием обычных
функций PHP, таких, как
|
Статический метод Zend_Loader::loadFile() загружает
файл PHP. Загружаемый файл должен содержать код PHP. Метод является
оберткой к PHP-функции include().
Этот метод бросает исключение Zend_Exception в случае
неуспеха - например, если требуемый файл не существует.
Пример 17.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 и затем проверяет наличие требуемого класса.
Пример 17.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.
Пример 17.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.
Пример 17.4. Пример регистрации метода обратного вызова автозагрузки
<?php Zend_Loader::registerAutoload(); ?>
После регистрации метода обратного вызова автозагрузки вы можете
ссылаться на классы из Zend Framework без их явной загрузки.
Метод autoload() автоматически запускает метод
Zend_Loader::loadClass(), когда вы ссылаетесь на класс.
Если вы расширили класс Zend_Loader, то можете передать опциональный
аргумент методу registerAutoload(), чтобы определить
класс, из которого следует регистрировать метод
autoload().