Автозавантаження файлів за допомогою composer

PHP містить два методи для завантаження файлів. include and require. Починаючи з php5 між ними немає великої різниці - обидва підвантажують файл ім'я якого передано. Сучасні php фреймворки містять сотні файлів. Значить, десь є файл з сотнями інклуд?

Ні. Замість цього в php є механізм роботи з Автозавантажувач файлів. Коли php звертається до імені класу, він перевіряє знае він, що це за клас. Якщо клас невідомий, то php звертається до Автозавантажувач щоб знайти потрібний клас і завантажити клас.

Така поведінка дозволяє створювати будь-які зручні структури проектів. З іншого боку, така поведінка не дозволяє мати два класи з одним ім'ям (і namaspace), але з різними тілами. Це, зокрема, не дозволяє поставити дві версії одного пакета через composer (на відміну від nodejs).

Одним з найпоширеніших загрузчиков є composer autoloader. Його можна використовувати окремо від фреймворків і великих проектів, тому я вирішив розповісти про роботу з ним.

Сomposer autoloader має 5 основних секцій:

Кожна з них призначена для завантаження своїх типів файлів.

  • "Exclude-from-classmap": містить список файлів і папок, які повинні бути виключені з автолоудера. Наприклад файл декларацій для підсвічування в IDE.
  • "Files": містить список файлів, які обіцяли бути підключені відразу, в місці підключення автолоудера. Наприклад файли конфігов.
  • "Classmap": містить ті імена класів, які були названі ні за стандартом psr-0, ні за стандартом psr-4. Наприклад ви можете назвати клас за яким, то прийнятим у вас в компанії стандарту і composer все одно його завантажить.
  • "Psr-0": містить імена файлів і папок, в яких лежать класи формату psr-0. У psr-0 повністю певний простір імен і ім'я класу повинні мати наступну структуру: "\ () *".
  • "Psr-4": містить імена файлів і папок, в яких лежать класи формату psr-4. У psr-4 повністю певне ім'я класу повинно мати наступну структуру: "\<ПространствоИмён>(\<ПодпространствоИмён>) * \<ИмяКласса>". Фраза підпростір імен трохи вводить в замішання, але якщо подивитися на приклади. То все стає зрозуміло (приклад узятий з офіційного сайту pfg):

Сomposer autoloader має два варіанти генерації файлів:

При простому варіанті, композер просто запам'ятовує які папки є в проекті, які неймспеси в яких папках лежать. При зверненні до класу, composer autoloader по неймспейсу знаходить потрібну папку і файл. Основним мінусом такого варіанту є те, що композер при кожному завантаженні файлу перевіряє, чи є такий файл. Перевірка існування файлу - це досить повільна операція

Сomposer один з тих проектів, який змінив майже всі в світі php. Використання всіх його возможнстью дозволить спростити процес розробки і зробити його значно більш зрозумілим і приємним.