Задать вопрос
alestro
@alestro

Возможно ли задать подсказку в phpstorme для возвращаемого типа?

Ситуация следующая. Есть шина команд, которая принимает команду или массив команд и возвращает объект с id операции и результатом выполнения команды или массив объектов-операций соответственно.
interface CommandBusInterface
{
    /**
     * @param CommandInterface|CommandInterface[] $commands
     * @return OperationInterface|OperationInterface[]
     * @throws PropagationStoppedException
     * @throws CommandBusException
     */
    public function dispatch(CommandInterface|array $commands): OperationInterface|array ;
}

interface OperationInterface
{
    public UuidInterface $uuid {
        get;
    }

    public mixed $result {
        get;
    }

    public function withResult(mixed $result): OperationInterface;
}

Хотелось бы чтобы при вызовеCommandBus::dispatch() phpstorm подсказывал тип возвращаемого результата.
Допустим, есть команда CreateUser и обработчик CreateUserHandler
class CreateUserHandler {
    public function handle(CreateUserCommand $command): User
}

Возможно ли сделать так, чтобы для вызова
$result = $bus->dispatch($createUserCommand)->result
phpstrom ассоциировал $result c CreateUserHandler::handle()
  • Вопрос задан
  • 51 просмотр
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@Vitsliputsli
Это не просто подсказки, это контроль типов. То, что зная какой тип возвращается Шторм может подсказать варианты это побочное удобство. Основное же должно быть то, что конкретная переменная имеет определенный тип, а значит не нужны дополнительные проверки и методы будут лаконичны и конкретны. У вас пока, то ли объект, то ли массив, то есть каждый раз нужно проверять что это. Лучше бы сделать объект-коллекцию.
Чтобы указать Шторму, что в конкретной переменной лежит только этот тип используется хинт, типа такого:
/** @var User $user */
но разумеется, он должен быть только в том коде где в $user лежит обязательно объект класса User и ни что иное.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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