Как правильно создавать заранее незивестный экземпляр класса? Есть ли некий правильный принцип написания/построения кода, для ситуации, когда нужно создать экземпляр класса, но заранее, что за класс нам нужен мы не знаем.
Например:
Есть баннер, в массиве хранятся варианты таргетингов ['geo','date','etc'] и есть классы реализующие проверки этих самых таргетингов.
Вариант foreach($banner['target'] as $target){
$obj=new $target();
$obj->check();
}
кажется мне не очень красивым и верным, но может это всего лишь домыслы.
Подобные ситуации бывают не часто, но бывают. Интересно мнение более опытных.

21 Авг 2019 в 07:00
128 +1
0
Ответы
1

Для создания экземпляра класса, когда заранее неизвестен сам класс, можно использовать рефлексию в PHP. В вашем случае, можно использовать функцию class_exists() для проверки существования класса и затем создавать экземпляр этого класса. Например:

foreach($banner['target'] as $target){
$className = ucfirst($target); // Приводим первую букву к верхнему регистру
if(class_exists($className)){
$obj = new $className();
$obj->check();
} else {
// Обработка случая, когда класс не найден
}
}

Этот подход более безопасен, так как он позволяет проверить существование класса перед его созданием. Кроме того, можно добавить обработку ситуации, когда класс не найден.

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

Надеюсь, это поможет вам в работе с динамическими классами в PHP. Если у вас есть дополнительные вопросы, не стесняйтесь задавать.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 091 автору
Первые отклики появятся уже в течение 10 минут
Прямой эфир