Основы
Автозагрузка позволяет вам использовать классы без явного подключения их файлов с помощью PHPrequire()
или PHPinclude()
. Таким образом, только те классы, которые действительно используются будут загружены и вы можете начать использовать любой класс не задумываясь о том, был ли он подключен или нет.
По умолчанию, в файле application/start.php уже определена автозагрузка для папок application/models и application/libraries. Загрузчик использует имя класса для определения пути к его файлу. Все имена файлов приводятся к нижнему регистру (если файл не найден в нижнем регистре, то используется изначальный регистр символов — прим. пер.).
Например, класс PHPUser
внутри application/models должен быть определён в файле user.php. Вы также можете импользовать вложенные папки если классы содержатся в пространствах имён. Например, класс PHPEntities\User
может содержаться в файле application/models/entities/user.php.
Регистрация папок
Как уже объяснялось выше, папки models и libraries по умолчанию уже зарегистрированы в автозагрузчике — однако вы можете зарегистрировать любые другие пути для использования этого же класса.
Autoloader::directories(array(
path('app').'entities',
path('app').'repositories',
));
Связи класс → файл
Иногда вам может понадобиться указать явное расположение файла для отдельного класса. Это самый быстрый способ загрузки.
Autoloader::map(array(
'User' => path('app').'models/user.php',
'Contact' => path('app').'models/contact.php',
));
Пространства имён
Многие сторонние библиотеки используют стандарт PSR-0 для размещения файлов классов. PSR-0 указывает, что имя файла должно совпадать с именем класса, а пространства имён создают иерархию папок. Если вы используете такую библиотеку вы можете просто зарегистрировать её корневую папку в автозагрузчике:
Autoloader::namespaces(array(
'Doctrine' => path('libraries').'Doctrine',
));
Код выше делает доступным класс PHPDoctrine\Subnamespace\Class
в файле application/libraries/Doctrine/Subnamespace/Class.php или в его нижнерегистровой версии — прим. пер.
До того, как в PHP 5.3 появились пространства имён многие проекты использовали символ подчёркивания (_) для создания иерархичности. Если вы используете одну из таких старых библиотек вы по прежнему можете использовать автозагрузчик Laravel.
Например, во SwiftMailer все классы начинаются с Swift_, поэтому мы зарегистрируем Swift в автозагрузчике таким образом:
Autoloader::underscored(array(
'Swift' => path('libraries').'SwiftMailer',
));
Теперь все классы, начинающиеся со Swift_ будут искаться в папке application/libraries/SwiftMailer — например, PHPSwift_My_Class
должен быть в файле SwiftMailer/My/Class.php — прим. пер.