Автозагрузка в проектах PHP
Чтобы использовать в своем приложении функции и классы, описанные в разных файлах, эти файлы
надо подключить с помощью инструкций include или require.
Есть несколько способов организовать подключение файлов.
-
можно подключать файлы в ручную.
Самый неудобный способ, хорошо использовать когда у вас немного файлов и изменять приложение не планируется.
-
можно написать свою функцию для автозагруки.
Хороший способ для автоматизации подключения необходимых файлов. Необходимо будет реализовать логику поиска файлов в структуре каталогов приложения. Использование этого подхода с одной стороны помогает разобраться, как работает автозагрузка классов, а с другой - тратится время на реализацию. То есть для начинающих разработчиков и хобби-проектов самое то, а вот в работе использовать не стОит.
-
использовать готовые функции автозагрузки.
Самый оптимальный вариант для рабочих проектов. Этот подход накладывает ограничение на структуру проекта.
Автозагрузка через Composer
Готовый вариант автозагрузчика предлагает Composer. Используя описание из файла composer.json
по команде
composer install
в каталоге /vendor/composer composer создает файлы вида autoload_<чего-то-там>.php для
автоматического подключения нужных файлов по пространству имен и имени класса. Вызов нужного
файла делается через файл /vendor/autoload.php. Этот единственный файл и нужно подключить
в файл со своим скриптом (обычно какой-нибудь /public/index.php).
require_once '../vendor/autoload.php';
Для перегенерации файлов автозагрузки нужно либо удалить каталог /vendor, либо выполнить
команду:
composer dump-autoload -o
Ключ «-o» («optimize») говорит, что классы соответствующие стандарту PSR-4 и прописанные для данного объекта будут прописаны в карте классов (classmap), что ускорит их загрузку в дальнейшем.
Теперь, про формат composer.json. Раздел для автозагруки должен выглядеть как-то так:
"autoload": {
"classmap": [
"full/path/to/file/with/class/classfile.php"
],
"psr-4": {
"Services\\": "services",
"Core\\": ""
},
"files": [
"config.php"
]
}
Раздел classmap описывает файлы с классами, ниаменование которых не соответсвует стандарту
PSR-4.
Раздел files описывает файлы, которые нужно загрузить.
В разделе psr-4 описываются пространства имен и пути, по которому лежат файлы с
соответствующими пространствами имен.
Полезные ссылки:
- Автозагрузка классов с помощью Composer (ru)
- PSR-4: Autoloader (en)
- Battle of the Autoloaders: PSR-0 vs. PSR-4 (en) (и перевод тут: Битва стандартов: PSR-0 против PSR-4)
Евгений Вдовенко
Физик по образованию, занимаюсь веб-разработкой на PHP с 2013 года. Нравится ковырятся в Zend Framework/Expressive и Joomla CMS/Framework. В процессе разборок с Python. Подумываю посмотреть Go. Считаю PostgreSQL крутым продуктом и внедряю его везде, где могу.