Может войдёшь?
Черновики Написать статью Профиль

Автозагрузка классов

перевод документация 3.x

  1. 1. Основы
  2. 2. Регистрация папок
  3. 3. Связи класс → файл
  4. 4. Пространства имён

Основы

Автозагрузка позволяет вам использовать классы без явного подключения их файлов с помощью PHPrequire() или PHPinclude(). Таким образом, только те классы, которые действительно используются будут загружены и вы можете начать использовать любой класс не задумываясь о том, был ли он подключен или нет.

По умолчанию, в файле application/start.php уже определена автозагрузка для папок application/models и application/libraries. Загрузчик использует имя класса для определения пути к его файлу. Все имена файлов приводятся к нижнему регистру (если файл не найден в нижнем регистре, то используется изначальный регистр символов — прим. пер.).

Например, класс PHPUser внутри application/models должен быть определён в файле user.php. Вы также можете импользовать вложенные папки если классы содержатся в пространствах имён. Например, класс PHPEntities\User может содержаться в файле application/models/entities/user.php.

Регистрация папок

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

PHP
Autoloader::directories(array(
  
path('app').'entities',
  
path('app').'repositories',
));

Связи класс → файл

Иногда вам может понадобиться указать явное расположение файла для отдельного класса. Это самый быстрый способ загрузки.

PHP
Autoloader::map(array(
  
'User'    => path('app').'models/user.php',
  
'Contact' => path('app').'models/contact.php',
));

Пространства имён

Многие сторонние библиотеки используют стандарт PSR-0 для размещения файлов классов. PSR-0 указывает, что имя файла должно совпадать с именем класса, а пространства имён создают иерархию папок. Если вы используете такую библиотеку вы можете просто зарегистрировать её корневую папку в автозагрузчике:

PHP
Autoloader::namespaces(array(
  
'Doctrine' => path('libraries').'Doctrine',
));

Код выше делает доступным класс PHPDoctrine\Subnamespace\Class в файле application/libraries/Doctrine/Subnamespace/Class.php или в его нижнерегистровой версии — прим. пер.

До того, как в PHP 5.3 появились пространства имён многие проекты использовали символ подчёркивания (_) для создания иерархичности. Если вы используете одну из таких старых библиотек вы по прежнему можете использовать автозагрузчик Laravel.

Например, во SwiftMailer все классы начинаются с Swift_, поэтому мы зарегистрируем Swift в автозагрузчике таким образом:

PHP
Autoloader::underscored(array(
  
'Swift' => path('libraries').'SwiftMailer',
));

Теперь все классы, начинающиеся со Swift_ будут искаться в папке application/libraries/SwiftMailer — например, PHPSwift_My_Class должен быть в файле SwiftMailer/My/Class.phpприм. пер.

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.