Автор оригинала: David Wong.
Эта статья иллюстрирует механизм автоматической загрузки классов PHP. Поделитесь для вашей справки следующим образом:
Предисловие
В основной структуре общего PHP мы обычно хорошо пишем класс, и нам нужно только написать соответствующее пространство имен или создать экземпляр класса напрямую, чтобы реализовать использование класса. Вместо использования собственных методов для включения файлов классов один за другим с require и include, это связано с механизмом автоматической загрузки классов PHP, который также является основным моментом, обсуждаемым в этой статье.
I. Концепция
В PHP-коде библиотеки классов, определенные в файле, можно использовать без явного указания пути к файлу для включения библиотек классов. Этот метод называется автоматической загрузкой.
При использовании класса или класса с определенным пространством имен его необходимо только создать напрямую. Механизм PHP выполняет поиск файла класса в библиотеке классов для введения пути и выдает исключение, когда он не может быть найден.
2. Способ реализации автоматической загрузки классов в PHP
1. Использовать __автозапуск Метод, когда в программе новый Когда класс не вводится напрямую, механизм выполнения PHP автоматически вызывает метод.
Поэтому, пока путь к классу записан в методе для введения логики, он может быть автоматически загружен в класс и создан. Если он все еще не найден, создается исключение.
void __autoload ( string $class )
До PHP 5.3, __автозапуск Исключение, создаваемое функцией, не может быть перехвачено блоком catch и может привести к фатальной ошибке. Начиная с PHP 5.3, вы можете создавать пользовательские исключения, а затем использовать пользовательские классы исключений. __автоматическая загрузка Функции могут автоматически рекурсивно загружать пользовательские классы исключений.
2. Используйте spl_autoload_регистр() Функция может зарегистрировать данную функцию как __автозапуск Реализации, такие как регистрация загружаемого класса в качестве параметра функции в очереди и его вызов __автозапуск В то же время мы получаем функции из очереди и вводим их для завершения создания экземпляра.
bool spl_autoload_регистр ([ вызываемая функция $autoload_function [, bool [, bool ]]] )
Характеристика:
(1) spl_autoload_регистр () Это обеспечивает более гибкий способ автоматической загрузки классов (в одном приложении может поддерживаться любое количество загрузчиков, например, в сторонних библиотеках);
(2) Функции могут регистрировать любое количество автоматических загрузчиков и автоматически загружать их при использовании неопределенных классов и интерфейсов. Зарегистрировав автозагрузчик, механизм сценариев получает последний шанс загрузить необходимые классы до того, как PHP выйдет из строя.
(3) При использовании нескольких spl_autoload_регистра Когда используется метод, PHP автоматически последовательно вызывает зарегистрированный метод. Третий параметр предназначен для управления тем, находится ли метод регистрации впереди или позади очереди.
Примечание: Рекомендуется использовать spl_autoload_register Чтобы добиться автоматической загрузки классов, __автоматическая загрузка Функции будут отброшены в более высоких версиях PHP. Несколько регистраций могут быть зарегистрированы с помощью SPL автозагрузка Метод, правило PHP-движка таково, если выполняется первый автозапуск Метод, вы все еще не можете найти это определение класса, но попробуйте выполнить вторую автозагрузку Метод и так далее 。
2. Значение автоматической загрузки класса PHP
1. По сравнению с абсолютным путем, представляющим путь к файлу класса, когда необходимо изменить имя каталога библиотеки классов или имя файла, PHP-файлы всех включенных файлов не нужно изменять, что позволяет избежать бремени увеличения реконструкции структуры каталогов исходного кода.
2. По сравнению с inclusion_path, введенным в php .ini, механизм автоматической загрузки может сэкономить много проблем с производительностью.
3. Несмотря на производительность и __ФАЙЛ__ Магические методы обладают аналогичной производительностью при введении относительного пути к классам, но механизм автоматической загрузки может предотвратить или уменьшить его. require_once , включение_онсе Нет необходимости рассматривать порядок введения классов, которые зависят друг от друга.
4. Решения для переименования нескольких классов или переименования в одном каталоге приложений и подкаталоге:
(1) Приложение гарантирует отсутствие дублирования имен классов. Для этого требуется, чтобы платформа поддерживала пользовательские правила маршрутизатора, изменяла имена модулей и действий по умолчанию, а также требовала кода приложения.
(2) пространство имен используется в приложении. Хотя короткие имена классов все еще повторяются, полные имена классов с пространством имен не повторяются.
3. Пункты, требующие внимания
1. Режим взаимодействия CLI PHP не применим к автоматической загрузке классов.
2. Порядок поиска по классам: Руководство по приоритетному поиску включает или требует Если входящий класс не найден, используется механизм автоматической загрузки класса.
3. Если имя класса используется, например call_user_func() Он может содержать опасные символы, такие как./. Рекомендуется, чтобы пользовательский ввод не использовался в такой функции, по крайней мере, ввод должен быть проверен.
Больше читателей, интересующихся контентом, связанным с PHP, могут ознакомиться с темами этого сайта: Введение в объектно-ориентированное программирование Php, Введение в базовую грамматику PHP, Краткое описание работы PHP и использования операторов, Краткое описание навыков сетевого программирования PHP, Полный набор навыков работы с массивом PHP и Строка Php. Краткое описание использования, вводный курс по работе с базами данных PHP + MySQL и общие навыки работы с базами данных PHP
Я надеюсь, что эта статья будет полезна для разработки программ на PHP для всех.
Оригинал: “https://developpaper.com/principle-analysis-of-automatic-loading-mechanism-such-as-php-advanced-learning/”