Как в php из одного класса сделать вызов других классов в зависимости от их названия?

Доброго времени суток!
Возник такой вопрос, надеюсь что сформулирую доступно.

Суть дела вот в чем. Есть объект класса который получает на входе определенный параметр, необходимо в зависимости от имени этого параметра вызвать класс (который называется как этот параметр, пока думаю так).
Например:
  • Http/StartController.php - класс, в метод которого передается необходимый параметр
  • Commands/TestCommand.php - команда, которую необходимо вызвать в зависимости от параметра
  • Commands/HelloCommand.php - команда etc
  • Commands/WeatherCommand.php - команда etc


Передаем например в метод класса StartController команду weather и должны получить ответ из метода класса WeatherCommand и т.д.
В общем не понятна мне структура всего этого(
Понятно, что необходимо будет в классах команд использовать одинаковые методы, и по сути больше ничего...

Это нужно для Бота сообществ VK. Может есть ссылки на примеры или еще что. Смотрел реализацию telegram-sdk-laravel но написано так, что мой текущий уровень знаний php и ООП в частности не хватает дабы разобрать все(

В общем прошу помощи! Заранее Благодарю, и извиняюсь если что-то не так описал
  • Вопрос задан
  • 798 просмотров
Решения вопроса 2
abler98
@abler98
Software Engineer
Route::post('start', 'StartController@execute');

<?php

use Illuminate\Http\Request;

class StartController extends Controller
{
    protected $commands = [
        'hello' => HelloCommand::class,
    ];

    public function execute(Request $request)
    {
        $command = $request->get('command');

        if ($command && is_string($command) && array_key_exists($command, $this->commands)) {
            return with(new $this->commands[$command])->execute();
        }

        return response('Command not found', 404);
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DJZT
@DJZT
Laravel - code for you
Кажется вы что-то делаете не так. И думаю вам тут надо перестроить приложение с использованием интерфейсов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы