Перейти к содержанию

3.2 AutoLoader. Инициализация

Last updated on 09.05.2021

autoloader2

Приступим к созданию класса “Autoloader”. Начнём с объявления всех необходимых переменных, а затем опишем метод инициализации класса.

Переменные класса

Инициализация класса

Переменные класса

Для этого в папке “core” каталога “includes” создаём файл “AutoLoader.php” В нём сразу укажем пространство имён “Wp\Core” и имя класса “AutoLoader”. Далее объявляем переменные “$instance” и “$exception”. В первой переменной будет храниться ссылка на текущий класс, а во второй ссылка на класс “Exceptions”. Теперь объявим три массива:

Инициализация Autoloader
  • classMap” – ассоциативный массив (полная карта классов).
  • classMapFrom” – тут хранятся пути к папкам, где расположены php файлы, которые необходимо подключить.
  • files” – в данном массиве хранятся полные пути к каждому файлу, что находятся в папках, указанных в массиве “classMapFrom”. Эти пути затем передаются массиву “classMap”.

Инициализация класса

autoload-2

Запуск класса производится при помощи метода “getInstance()”. Данный метод содержит один параметр. В качестве аргумента, этому методу передаётся:

  • Список папок, “.php” файлы которых необходимо подключить
  • Файл “.php”, который содержит ассоциативный массив со списком классов и их файлов.

Данный метод либо инициализирует класс “Autoloader”, либо возвращает ссылку на него. Если требуется инициализация класса, то запускается конструктор класса. В конструкторе происходит: 1) регистрация класса “Autoloader” в качестве метода автозагрузки; 2) Создание карты классов; 3) подключение всех классов. Сам конструктор закрыт от внешнего доступа с помощью модификатора “private“.

Конструктор работает с одним параметром. После регистрации класса в качестве автозагрузчика, приступаем к обработке параметра “$path”. С помощью функции “is_array()”, узнаём является ли параметр “$path” массивом или нет. Если является, тогда запускаем конструкция “foreach”. Она позволяет перебрать любой массив. Особенно данная конструкция удобна для работы с ассоциативными массивами.

При переборе массива, мы извлекаем значение каждого его элемента и выясняем является ли полученное значение файлом (“is_file()”) или папкой(“is_dir()”). Если это файл, то запускаем метод “addClassMapFromFile()” класса “AutoLoader”. Если это папка, то запускаем метод “addClassMapFromDir()” этого же класса. Если параметр “$path” не является массивом, тогда узнаём является ли данный параметр файлом или папкой и запускаем метод “addClassMapFromFile()” или “addClassMapFromDir()”.

Эти два метода позволяют построить “карту классов”. То есть создаётся ассоциативный массив, в котором ключом является комбинация пространства имени класса и его названия. Значением же служит полный путь к файлу, в котором был объявлен этот класс. В классе “AutoLoader” карта классов хранится в массиве classMap”.

После того, как формирование карты классов завершилось, запускается метод “loadAllFiles()”. Он перебирает всю карту классов и подключает каждый указанный файл. Стоит отметить, что подключаемый файл может не содержать каких-либо классов, но в нём могут быть прописаны различные функции. В этом случае файл тоже будет подключён.

В конце конструктор получает ссылку на класс “Exceptions”. Это следует делать только после подключения всех необходимых файлов. Если попытаться получить ссылку на класс “Exceptions” до подключения, тогда возникнет ошибка, которую наш обработчик перехватить не сможет.

Опубликовано в рубрике3. Класс AutoloaderЯдро Wordpress