@E6APB

Как подключать классы в рантайме в PHP?

У меня будут дофига однотипных классов. Ну, штук 20 точно. Будут одинаковые методы, просто их тело будет различаться. Из за такого большого количества, думаю использование use вначале контроллера нецелесообразно (или целесообразно?). Я хотел бы usать классы прямо на лету. Как лучше такое реализовать - use в начале или как-то по-другому?

Это по аналогии с миграциями в Ларавел - почти одинаковые классы, просто тела методов различаются
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
@MadridianFox
Web-программист, многостаночник
Как уже написал Stalker_RED, класс не обязательно юзать. Можно просто обратиться к нему по полному имени. Полное имя класса - это неймспейс + имя класса.
Т.к. вы будете создавать объект класса на основании каких-то данных, то рано или поздно всё сведётся к тому, что вы запишете полное имя класса как строку в переменную и потом используете эту переменную для создания объекта.
function makeObject($class_name){
    $full_class_name = "\\app\\some_strategy\\" . $class_name;
    return new $full_class_name();
}

Кроме того, Melkij упомянул паттерн проектирования, который используется как раз для инкапсуляции логики создания объекта на основании каких-то данных. В зависимости от предметной области, и того, как создание таких объектов в неё укладывается, есть смысл рассмотреть такие паттерны как Factory Method и Abstract Factory.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
Раз они однотипные - то может и задачу они решают однотипную?
Может, вам нужен паттерн factory и в контроллере и будет только use фабрики?
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
www.php-fig.org/psr/psr-4

// эти две строчки подключают точно такой-же класс
use ProjectName\Admin\User as User; 
$user = new User();

// как эта строчка
$user = ProjectName\Admin\User();
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы