Введение в Zend Framework

 Learning Zend Framework

appendix

 Zend Framework Reference


  • Zend_Gdata
  • Zend_Http
  • Zend_InfoCard
  • Zend_Json
  • Zend_Layout
  • Zend_Ldap
  • Zend_Loader
  • Zend_Locale
  • Zend_Log
  • Zend_Mail
  • Zend_Markup
  • Zend_Measure
  • Zend_Memory
  • Zend_Mime
  • Zend_Navigation
  • Zend_Oauth
  • Zend_OpenId
  • Zend_Paginator
  • Zend_Pdf
  • Zend_ProgressBar
  • Zend_Queue
  • Zend_Reflection
  • Zend_Registry
  • Zend_Rest

  • Zend_Search_Lucene
  • Zend_Serializer
  • Zend_Server
  • Zend_Service
  • Zend_Session
  • Zend_Soap
  • Zend_Tag
  • Zend_Test
  • Zend_Text
  • Zend_TimeSync
  • Zend_Tool
  • Zend_Tool_Framework
  • Zend_Tool_Project
  • Zend_Translate
  • Zend_Uri
  • Zend_Validate
  • Zend_Version
  • Zend_View
  • Zend_Wildfire
  • Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Ttranslation 27.4% Update 2010-11-28 - Revision 23238 - Version ZF 1.11.x

    Глава 42. Zend_Loader

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

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

    [Подсказка] Zend_Loader vs. require_once()

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

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

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

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

    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().

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

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

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

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

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

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

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

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

    42.1.3. Проверка на возможность чтения из файла

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

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

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

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

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

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

    Пример 42.4. Пример регистрации метода автозагрузки

    Zend_Loader::registerAutoload();

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

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

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

    В силу особенностей семантики статических функций в PHP вы должны реализовать код для обоих методов loadClass() и autoload(), при этом autoload() должен вызывать self::loadClass(). Если ваш метод autoload() делегирует родительскому классу вызов self::loadClass() то будет вызван метод родительского класса, не подкласса.

    class My_Loader extends Zend_Loader
    {
        public static function 
    loadClass($class$dirs null)
        {
            
    parent::loadClass($class$dirs);
        }

        public static function 
    autoload($class)
        {
            try {
                
    self::loadClass($class);
                return 
    $class;
            } catch (
    Exception $e) {
                return 
    false;
            }
        }
    }

    Zend_Loader::registerAutoload('My_Loader');

    Регистрацию метода автозагрузки можно отменить. Метод registerAutoload() имеет опциональный второй аргумент, его значением по умолчанию является TRUE. Если этот аргумент равен FALSE, то данный метод автозагрузки удаляется из стека SPL.

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...