@IsaevDev

Как вам такой autoload для PHP?

Уделите минутку небольшому велосипеду для небольшого проекта

Есть файлы
/Core.php
/Map.php
/custom/Class.php

Определена функция autoload, которая будет брать путь до файла класса из Map.php

При разработке Map.php имеет вид:
<?
class Map
{
public static $inited = false;
}
?>


Суть подхода такова:
После загрузки файлов на сервер, при первом запуске, Core.php проверяет переменную Map::$inited
Обнаружив там false, Core.php рекурсивно обходит все файлы и папки в /custom и составляет массив вида
$map = [
'Class' => '/custom/'
];

После чего перезаписывает класс Map с $inited = true (пересохраняет как файл).
Таким образом при следующем запуске, будет использована созданная карта классов.

PS. Да, я знаю о composer и namespace. Я хочу услышать ваше мнение о моем подходе с технической точки зрения
  • Вопрос задан
  • 540 просмотров
Решения вопроса 3
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
За вас уже все придумали www.php-fig.org/psr/psr-4
Ответ написан
DevMan
@DevMan
таковой (по принципу, не реализации) подход вполне себе использовался раньше, да и сейчас используется.
но постепенно идет тенденция на использование composer/psr.

фактически, нужно каждый раз вспоминать где лежит файл (в каком namespace)
имхо - не аргумент, от слова совсем:
- нормальная ide сама подскажет где лежит файл
- рекурсивный grep никто не отменял
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Imho подход плохой.
а) рекурсивно обходить папки - это ооочень долго
б) в нормальной ситуации, у скрипта не должно быть прав на изменение исполняемых файлов.

Собственно для этого и придумали PSR4 (хотя нечто похожее можно и без namespace использовать легко)
Главная идея - по названию класса должно быть однозначно понятно где он лежит.
Если вдруг есть любимый класс у которого название не совпадает с местоположением - вот тогда на сцену выходит map файл который заранее заполняется ручками разработчика.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы