Динамическая загрузка файлов и классов<!--Loading Files and Classes Dynamically--> Класс Zend_Loader включает в себя методы, помогающие производить динамическую загрузку файлов. Zend_Loader vs. require_once() Методы Zend_Loader лучше всего использовать, если имя файла, которого нужно загрузить, является переменным - например, основано на вводе пользователя или аргументе метода. Если вы загружаете файл или класс, чье имя является константой, то использование Zend_Loader не дает каких-либо преимуществ по сравнению использованием обычных функций PHP, таких, как require_once(). Загрузка файлов<!--Loading Files--> Статический метод Zend_Loader::loadFile() загружает файл PHP. Загружаемый файл должен содержать код PHP. Метод является оберткой к PHP-функции include(). Этот метод бросает исключение Zend_Exception в случае неуспеха - например, если требуемый файл не существует. Пример использования метода loadFile()<!--Example of loadFile() method--> ]]> Аргумент $filename задает имя файла для загрузки, оно не должно содержать пути к файлу. В целях безопасности производится проверка $filename. $filename должен содержать только алфавитно-цифровые символы, тире ("-"), знак подчеркивания ("_") и точку ("."). На аргумент $dirs эти ограничения не распространяются. $dirs задает директории для поиска файла. Если он равен NULL, то для поиска используется только include_path. Если он является строкой или массивом, то файл сначала ищется в данной директории (директориях) и затем в include_path. Аргумент $once является значением булевого типа. Если равен TRUE, то Zend_Loader::loadFile() для загрузки файла использует PHP-функцию include_once(), иначе используется функция include(). Загрузка классов<!--Loading Classes--> Статический метод Zend_Loader::loadClass($class, $dirs) загружает файл PHP и затем проверяет наличие требуемого класса. Пример использования метода loadClass()<!--Example of loadClass() method--> ]]> Строка, задающая класс, преобразуется в относительный путь посредством замены знаков подчеркивания разделителями директорий и добавления расширения '.php' в конец. В примере выше 'Container_Tree' преобразуется в 'Container/Tree.php'. Если $dirs является строкой или массивом, то Zend_Loader::loadClass() ищет в директориях в том порядке, в котором они были определены. Загружается первый найденный файл. Если файл не найден в директориях $dirs, то производится поиск в include_path. Если файл не найден или класс не существует после загрузки, то Zend_Loader::loadClass() бросает исключениеZend_Exception. Для загрузки используется метод Zend_Loader::loadFile(), поэтому имя класса должно содержать только алфавитно-цпфровые символы, тире ('-'), знак подчеркивания ('_') и точку ('.'). Проверка, является ли файл доступным для чтения<!--Testing if a File is Readable--> Статический метод Zend_Loader::isReadable($pathname) возвращает TRUE, если по заданному пути существует файл и он доступен для чтения, иначе возвращается FALSE. Пример использования метода isReadable()<!--Example of isReadable() method--> ]]> Аргумент $filename задает имя файла для проверки. Он может содержать путь к файлу. Этот метод является оберкой к PHP-функции is_readable(). Эта функция не производит поиск в include_path, в то время как метод Zend_Loader::isReadable() производит. Использование автозагрузчика<!--Using the Autoloader--> Класс Zend_Loader содержит метод, который вы можете регистрировать через автозагрузчик PHP SPL. Zend_Loader::autoload() является методом обратного вызова. Для удобства Zend_Loader предоставляет метод registerAutoload() для регистрации своего метода autoload(). Если в среде PHP отсутствует расширение spl_autoload, то метод registerAutoload() бросает исключение Zend_Exception. Пример регистрации метода обратного вызова автозагрузки<!--Example of registering the autoloader callback method--> ]]> После регистрации метода обратного вызова автозагрузки вы можете ссылаться на классы из Zend Framework без их явной загрузки. Метод autoload() автоматически запускает метод Zend_Loader::loadClass(), когда вы ссылаетесь на класс. Если вы расширили класс Zend_Loader, то можете передать опциональный аргумент методу registerAutoload(), чтобы определить класс, из которого следует регистрировать метод autoload(). Пример регистрации метода автозагрузки из расширенного класса<!--Example of registering the autoload callback method from an extended class--> ]]>