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

21 Авг 2019 в 07:03
204 +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 command
$controller->executeCommand('hello'); // Output: Executing Hello command

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

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

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

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир