А пока полным ходом идёт заполнение опросника, спешу продолжить тему автозагрузчика. Кстати, реально спасибо всем, кто заполнил опросник. Я не ожидал, что будет столько отклика и полезных ответов. Позже обязательно сведу все результаты и поделюсь с вами, а пока перейдем к материалу =)
😢 Вообще тема PSR достаточно болезненна. Не многие знают, что это не только "правила кодстайла", но и вполне универсальные, стандартизированные концепции, для переиспользования в абсолютно разных проектах.
👉 Начало было положено в 2010 с PSR-0 (Autoloading Standard), который ни много ни мало стал первым шагом к объединению фреймворков, а также безболезненной возможности установки пакетов в ваше приложение (напр. composer в 2012). Однако уже в 2014 ему на смену пришел PSR-4, а PSR-0 был объявлен deprecated.
📌 Согласно PSR-4 мы должны называть файл, взяв название класса и добавив к нему расширение
.php, при этом регистр названия класса и файла должны полностью совпадать.📌 Наш файл должен лежать в каталоге, путь которого совпадает с частями нашего namespace. Например
MyModule\Sub\SomeClass будет лежать по пути MyModule/Sub/SomeClass.php.Обычно в качестве неймспейса верхнего уровня выбирают название приложения / пакета, иногда вместе с названием компании или ником разработчика (например в фреймворке Symfony все классы лежат внутри неймспейса Symfony). По мере роста пакета добавляются дополнительные уровни вложенности и получится что-то вроде
\Symfony\Component\HttpFoundation\Request.Composer autoload
👍 Но, чтобы не писать свой автозагрузчик руками - можно использовать
composer.json. Для этого в нём следует создать директиву autoload, во внутри которого прописать "psr-4" и правила, по которым следует сопоставить корневой неймспейс с корневой папкой проекта. Это будет выглядеть так.❗️ Нужно обратить внимание, что:
1. Важно писать
psr-4 именно в нижнем регистре.2. В качестве разделителя использовать двойной бекслеш
\\ — это особенность json, первый он воспринимает как экранирование.3. В конце неймспейса также следует указывать
\\
📌 Есть возможность поиска определенного неймспейса сразу в нескольких директориях, для этого их нужно указать как массив.📌 Также есть возможность указать fallback каталог, в котором будет искаться любое пространство имён, для этого оставляем неймспейс пустым.
🔗 Все ссылки будут объеденены во время
install / update / dump-autoload в один массив, который композер положит в сгенерированный файл vendor/composer/autoload_psr4.php и пробросит путь к нему в основной файл автозагрузки vendor/autoload.php (там могут быть подключены и другие файлы типа psr-0, classmap и т.д.)🤝 Вам остается только подключить файл в свой проект с помощью
require_once __DIR__ . '/vendor/autoload.php'; и можно избавить себя от необходимости писать собственный автозагрузчик.Также напоминаю, что обсудить любую тему и прокомментировать пост можно в нашем чатике, так что присоединяйся 🍺
#php #psr #autoload #composer #junior #source