Как в php из одного класса сделать вызов других классов в зависимости от их названия? Доброго времени суток!
Возник такой вопрос, надеюсь что сформулирую доступно.
Суть дела вот в чем. Есть объект класса который получает на входе определенный параметр, необходимо в зависимости от имени этого параметра вызвать класс (который называется как этот параметр, пока думаю так)
Например:Http/StartController.php - класс, в метод которого передается необходимый параметр Commands/TestCommand.php - команда, которую необходимо вызвать в зависимости от параметраCommands/HelloCommand.php - команда etcCommands/WeatherCommand.php - команда et
Передаем например в метод класса StartController команду weather и должны получить ответ из метода класса WeatherCommand и т.д
В общем не понятна мне структура всего этого
Понятно, что необходимо будет в классах команд использовать одинаковые методы, и по сути больше ничего..
Это нужно для Бота сообществ VK. Может есть ссылки на примеры или еще что. Смотрел реализацию telegram-sdk-laravel но написано так, что мой текущий уровень знаний php и ООП в частности не хватает дабы разобрать все
В общем прошу помощи! Заранее Благодарю, и извиняюсь если что-то не так описал

21 Авг 2019 в 07:03
181 +1
0
Ответы
1

Для реализации данного функционала вам следует использовать рефлексию в PHP. Рефлексия позволяет получить информацию о классах, их методах и свойствах во время выполнения программы.

Пример кода для вашего случая может выглядеть примерно так:

class StartController
public function executeCommand($commandName)
$commandClassName = 'Commands\\' . ucfirst($commandName) . 'Command'
if(class_exists($commandClassName))
$command = new $commandClassName()
$command->execute()
} else
echo "Command not found"



class WeatherCommand
public function execute()
echo "Executing Weather command"

class HelloCommand
public function execute()
echo "Executing Hello command"

$controller = new StartController()
$controller->executeCommand('weather'); // Output: Executing Weather comman
$controller->executeCommand('hello'); // Output: Executing Hello command

В данном примере метод executeCommand класса StartController получает название команды, формирует имя класса команды на основании этого названия и создает экземпляр этого класса. После этого вызывается метод execute у созданного объекта команды.

Пожалуйста, также убедитесь, что ваши классы команд находятся в правильной директории Commands и правильно используют пространства имен. Вы также можете добавить дополнительную логику и обработку ошибок по вашему усмотрению.

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

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