Предисловие
Здесь много маленьких друзей, которые учатся. PHP Одной из самых ранних проблем, с которыми мы столкнулись, была require 、 include и require_once 、 include_once Любовь убивает друг друга.
Узнав об их историях любви и убийств, они часто начинают использовать фреймворки. Фреймворк-хороший инструмент для работы, но вы знаете, что обычно вы это делаете. новое Что случилось с новым классом? Задумывались о том, почему мы Следуем правилам Будет ли он автоматически загружать все для нас? Давайте исследуем и раскроем эту тайну.
Временная шкала
Паровой век
оставайтесь PHP Часто ли вы видите такой код в верхней части кода?
require 'lionis.php'; require 'is.php'; require 'cool.php';
Если бы только некоторые из них были представлены PHP Сценарий, это приемлемо. Когда вводятся тысячи сценариев, взрывы неизбежны. Если вы измените имя сценария, вам также необходимо изменить имя каждого сценария, который вводит сценарий. Может ли он не взорваться? Как я могу даже напечатать это предложение?
Электрический век
останься PHP Началась эра электричества. __автоматическая загрузка и spl_autoload_регистр Регистрация функций пользовательская политика автоматической загрузки.
Вообще говоря, __автозапуск и spl_autoload_регистр Это Организация-убийца Они собираются нанять. Страны-убийцы ( функция ) Когда мы хотим кого-то починить( новый Все, что вам нужно сделать, это указать имя.( Название класса Остальное убийца Это нам поможет.
__автонагрузка
PHP 5 начал предоставлять портал с этой функцией. Когда вы используете class , когда он не может его найти, он вводит имя класса в функцию в качестве параметра.
выход
Oyer, I'm Lionis.
spl_autoload_регистр
Если мы проект Большой, старый или ты один Мучение Для юных пионеров, существуют разные критерии того, что нужно ввести, если все они размещены в это время. __загрузка В функции эта функция немедленно расширится. И __автозапуск Он единственный в мире. Если он занят, это может привести к ошибкам. Если вы хотите уничтожить человека, вы должны сначала надуть его.
PHP 5.1.2 начинает предоставлять эту функцию порталу, регистрируя данную функцию как __автозагрузка Реализация. Итак, давайте рассмотрим некоторые фреймворки или плагины, которые могут отображаться для совместимости, когда они используются сами по себе. function_exists(spl_autoload_регистр) 。
Да, теперь мы можем написать множество различных функций автоматической загрузки.
Информационный век
Мастер, будьте осторожны, впереди злой дух! 。 Если каждый из нас реализует набор методов автоматической загрузки, то для каждой PHP сборки и фрейма используются уникальные загрузчики, и каждая платформа использует различную логику для загрузки классов, интерфейсов и свойств PHP.
Когда мы используем некоторые сторонние фреймворки, нам нужно выяснить, что находится в загрузочном файле. загрузчик Вот сколько и время Я не могу пройти через это. PHP-FIG Признавая эту проблему, я рекомендую использовать ее. PSR-4 Спецификация для облегчения межкомпонентной Совместимости Поэтому мы можем использовать автоматический загрузчик.
Спецификация PSR-4
Используйте префикс пространства имен, чтобы соответствовать каталогу в файловой системе.
Отношение отображения является
namespace => filePath \Lionis\Cool => cool
Классы с пространствами имен
Создайте объект
В это время, согласно спецификации PSR-4 , должен быть загружен автоматический загрузчик cool/|/Каталог Real.php 。
Неверно! Это не то, что вы должны делать самостоятельно. загрузчик Ну а иначе что? Из воздуха Появляется загрузчик Как насчет этого? Это официально? Встроенный Сейчас?
вы вышли Теперь мы можем использовать менеджер зависимостей композитор Для создания PSR-4 Автоматического загрузчика. Вы можете задаться вопросом, не следили ли за моим старым проектом. PSR-4 Как насчет норм? Эй, эй, давай исследуем и выясним. композитор Как решить эту проблему?
Композитор
О, рев, на этот раз мы сосредоточены на автоматической загрузке с запросом, поэтому композитор Установка и использование не обсуждаются.
композитор Четыре настройки автоматической загрузки Режим загрузки :
- PSR-0
- PSR-4
- карта классов
- файлы
PSR-0
Пространства имен должны соответствовать уровню каталога и могут использоваться _ В качестве разделителя путей, это может привести к тому, что результаты поиска в каталоге станут слишком глубокими.
оставайтесь составленными реализуйте устанавливайте В ожидании операции композитор Сохраняйте конфигурацию в файле vendor/composer/autoload_psr0.php Возвращаемый массив в файле.
Например, Very Good=> поставщик Лев действительно классный, определен и используется Очень Хорошая любовь, называется какой-то класс. PSR-0 Фактический загруженный каталог является vendor/Lionis/IsReal/Cool/Very/Good/Love/SomeClass.php.
Верно, это страшно глубоко, так что PR-0 Он был официально отменен. Но некоторые основные рамки были реализованы. PSR-0 Для достижения совместимости с понижением PSR-0 。
Конфигурация Composer.json:
"autoload": {
"psr-0": {
"Very\Good": "vendor\Lionis\IsReal\Cool"
}
}PSR-4
PSR-4 Это рекомендуемая альтернатива. PSR-0 。 и PSR-0 Разница в том, что он отменен. _ В качестве разделителей и структур каталогов.
оставайтесь составленными реализуйте устанавливайте В ожидании операции композитор Сохраняйте конфигурацию в файле vendor/composer/autoload_psr4.php Возвращаемый массив в файле.
Например, Очень хороший=> вендор, который действительно классный, определен и используется, Очень хороший называется\ Love\SomeClass, PSR-4 Фактический загруженный каталог vendor/Lionis/IsReal/Cool/Love/SomeClass.php.
Конфигурация Composer.json:
"autoload": {
"psr-4": {
"Very\Good": "vendor\Lionis\IsReal\Cool"
}
}карта классов
карта классов Путем настройки указанного каталога и файла, композитор реализует устанавливает В ожидании операции композитор Он сканирует соответствующий каталог в .php В конце файла класс И хранится в vendor/composer/autoload_classmap.php Возвращаемый массив в файле.
Конфигурация Composer.json:
"autoload": {
"classmap": [
"Lionis/",
"Xiaoer/"
]
}Если под Lion есть файл под названием Very Cool, то vendor/composer/autoload_classmap.php Он будет сгенерирован.
$baseDir . '/Lionis/VeryCool.php',
// Other mappings
);файлы
файлы Это простой, грубый файл загрузки. оставайтесь составленными реализуйте устанавливайте В ожидании операции композитор Сохраняйте конфигурацию в файле vendor/composer/autoload_static.php Создайте файл $файлы Массив.
Конфигурация Composer.json:
"autoload": {
"files": ["Lionis/Very/Cool.php"]
}Резюме
композитор с помощью composer.json Используйте json Формат, чтобы указать, что нам нужно Автоматическая загрузка | правила . Нам просто нужно импортировать файл ввода. vendor/autoload.php Он прост в использовании. Автоматическая загрузка 。
Если вы правы композитор Реализация Автоматическая загрузка Принцип заинтересованности, может следовать поставщику Средству autoload.php Посмотрите на исходный код.
резюме
из Каменного века досягаемости Информационный век , PHP После многих экспериментов и изменений он становится все лучше и лучше. Конечно, многие отличные фреймворки позволяют нам развиваться быстрее, и некоторые знания, которые нам нужно понять, скрыты, поэтому мы больше фокусируемся на реализации логики. Но иногда нам приходится пытаться понять, как они работают, и совершенствоваться самим. Как сказал мой учитель, мне может повезти, если я вдруг наступлю на дерьмо.
Больше
Подробная информация об автоматической загрузке библиотеки классов PHP
Вознаграждение и связь
Если вы чувствуете себя плодотворным, пожалуйста, дайте мне награду, чтобы побудить меня выпускать более качественный контент.
Оригинальная статья взята из PushMetop.