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