Урок 6. Автозагрузка классов и стандарт PSR-4 Flashcards
Функция автозагрузки
Встроенная функция которая выполняется при первом обращении к классу, но ее логику можно переписать и выполнять автоматическое подключение классов в файл
spl_autoload_register()
Стандарт автоподгрузки PSR-4
Стандарт примеяется при создании автозагрузки любого типа классов
- Полный путь должен начинаться с первого и главного пространства имен
- После главного пространства в имени указываются подпространства имен
- Полное имя класса должно завершаться именем класса
- В именах классов можно использовать нижние подчеркивания и буквы с разным регистром
- Все классы ДОЛЖНЫ быть строго чувствительны к регистру
- Должна быть определена главная директория в которой будут находиться все файлы классов (src App)
- Название класса должно совпадать с названием файла в директории
- Функция автоподгрузки не должна ничего возвращать или обрабатывать
Пример
spl_autoload_register(function ($className) {
$baseDir = __DIR__ . DIRECTORY_SEPARATOR . ‘src’;
$prefix = ‘App\’;
$prefixLen = strlen($prefix);
if (strncmp($prefix, $className, $prefixLen) !== 0) {
return;
}
$relativeClassName = substr($className, $prefixLen);
$fileName = $baseDir . DIRECTORY_SEPARATOR . str_replace(‘\’,
DIRECTORY_SEPARATOR, $relativeClassName) . ‘.php’;
if (file_exists($fileName)) {
require $fileName;
}
});
Нормальный разбор
Функция автоподгрузки нужна чтобы просто при обращении к классу выстроить путь до файла поэтому
должна быть директория в которой расположены все классы приложения. Эта директория считается главным пространством имен например APP затем все файлы с классами делятся на подпространства имен ГЛАВНОЕ что бы имена файлов и подпространств полностью совпадали в том числе названия директорий./
В функцию spl_autoload_register() в колбек функцию передается полный путь пространства имен файла и все что нужно сделать это заменить префикс на путь до главной директории пространства имен и в конце добавить ‘.php’