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