Дек 03 2008
Автоматическая загрузка внешних библиотек
Перевод записи 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, но я считаю что давно уже пора на него перебираться.