
Для автозавантаження класів і функцій в composer використовуються autoload та autoload-dev.
autoload – автозавантаження для PHP. Підтримує psr-4, psr-0, classmap та files.
# PSR-4
Класи завантажуються на основі шляхів до файлів від кореня додатку, які базуються на namespaces. В одному файлі – один клас згідно розміщення. Наприклад:
"autoload": {
"psr-4": {
"App\\": "app/",
"Foo\\": "src/"
}
}
Доступними будуть:
new \App\Psrfour() – файл app/Psrfour.php:
namespace App;
class Psrfour {
// TODO
}
new \App\Subfolder\Psrfoursub() – файл app/Subfolder/Psrfour.php
namespace App\Subfolder;
class Psrfoursub {
//TODO
}
new \Foo\Bar\Baz() – файл src/Bar/Baz.php
namespace Foo\Bar;
class Baz {
// TODO
}
В Laravel цей тип автозавантаження використовується для власне побудови всієї логіки сайту в директорії App відносно кореню проекту.
# PSR-0
Класи завантажуються на основі шляхів до файлів від кореня пакету. Після впровадження PSR-4 використовується рідко.
# Classmap
Сканує всі файли (і в піддиректоріях) з розширенням .php або .inc для підключення КЛАСІВ до проекту (може бути безліч в одному файлі). Ці файли будуть додані до автозавантаження, в них не повинно міститися namespace.
"autoload": {
"classmap": [
"lib/", "Something.php"
]
}
new \Def() – файл lib/Abc.php – ім’я не важливо
class Def {
// TO DO
}
Після зміни імені файлу або додаванні нового класу необхідно виконувати команду composer dump-autoload для оновлення автозавантаження. Інформація щодо розміщення класу кешується в vendor/composer/autoload_classmap.php
В Laravel цей тип автозагрузки використовується для підключення класів seeds та factories.
# Files
Використовується для завантаження ФУНКЦІЙ конкретного файлу. Наприклад,
"autoload": {
"files": [
"lib/helper.php"
]
}
файл lib/helper.php
function helper_function(){
// TO DO
}
autoload-dev – аналогічно autoload але лише для потреб розробки (development). В Laravel використовується для завантаження тестів:
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},