Как в php из одного класса сделать вызов других классов в зависимости от их названия? Доброго времени суток! Возник такой вопрос, надеюсь что сформулирую доступно. Суть дела вот в чем. Есть объект класса который получает на входе определенный параметр, необходимо в зависимости от имени этого параметра вызвать класс (который называется как этот параметр, пока думаю так). Например:Http/StartController.php - класс, в метод которого передается необходимый параметр Commands/TestCommand.php - команда, которую необходимо вызвать в зависимости от параметраCommands/HelloCommand.php - команда etcCommands/WeatherCommand.php - команда etc Передаем например в метод класса 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"; } } $controller = new StartController(); $controller->executeCommand('weather'); // Output: Executing Weather command $controller->executeCommand('hello'); // Output: Executing Hello command
В данном примере метод executeCommand класса StartController получает название команды, формирует имя класса команды на основании этого названия и создает экземпляр этого класса. После этого вызывается метод execute у созданного объекта команды.
Пожалуйста, также убедитесь, что ваши классы команд находятся в правильной директории Commands и правильно используют пространства имен. Вы также можете добавить дополнительную логику и обработку ошибок по вашему усмотрению.
Надеюсь, этот пример будет полезен для вас. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать!
Для реализации данного функционала вам следует использовать рефлексию в 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 и правильно используют пространства имен. Вы также можете добавить дополнительную логику и обработку ошибок по вашему усмотрению.
Надеюсь, этот пример будет полезен для вас. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать!