Дек 03 2008

Автоматическая загрузка внешних библиотек

Раздел: Веб-разработкаМета @ 09:33

Перевод записи Auto-loading vendor files (or any other file) с блога Cakebaker’a.

Если вы используете внешние классы, не относящиеся к CakePHP (т.е. не являющиеся готовыми компонентами, хелперами, и т.д., например - PhpMailer или классы Pear), вам приходится импортировать эти классы вручную с помощью вызова App::import(’Vendor’, ‘ClassName’). Этот вызов работает если ваши классы находятся в папке ‘vendors’. То есть в каждом контроллере, или модели, или любом другом месте где вы хотите использовать внешний класс, вам приходится его сначала импортировать. Это не очень удобно.

К счастью, в PHP5 есть решение для этой проблемы — автозагрузка. Вот цитата из руководства по языку: «Вы можете определить функцию __autoload, которая автоматически вызывается в том случае, когда вы пытаетесь использовать класс/интерфейс, который не был определен ранее. Вызов этой функции - это последний шанс для интерпретатора загрузить класс прежде, чем он закончит выполнение скрипта с ошибкой».

В CakePHP удобным местом для вставки этой функции является файл /app/config/bootstrap.php. Вот пример функции для автозагрузки:

function __autoload($className) {
    App::import('Vendor', $className);
}

Если вы хотите использовать для автозагрузки отдельную функцию или метод класса (например, загруженные классы надо еще как-то инициализировать) то надо просто зарегистрировать эту функцию или метод:

class AutoLoader {
    public static function load($className) {
        App::import('Vendor', $className);
/* тут инициализация импортированного класса */
    }
}
 
spl_autoload_register(array('AutoLoader', 'load'));

Конечно, эти возможности доступны только в PHP5, но я считаю что давно уже пора на него перебираться.

Теги: , ,

Напиши комментарий!