Псалом: метод Handle, возвращающий несколько типов

ИЗМЕНИТЬ Это псалом, а не PHP MD.

Я пишу консольную команду Symfony. В своемexecute метод я получаю аргумент с $input->getArgument('argument_name')метод. И я передаю это значение службе, которая ожидает, что это значение будет строкового типа.

Общий код:

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        if (is_string($input->getArgument('identifier'))) {
            $identifier = $input->getArgument('identifier');
        } else {
            return 2;
        }
        if ($input->getArgument('mode') === "vehicle") {
            $this->vehicleService->getVehicleInfo($identifier);
            return null;
        }
        if ($input->getArgument('mode') === "company") {
            $this->vehicleService->getCompanyVehiclesInfo($identifier);
            return null;
        }
        return 1;
    }

PHP MD Psalm не видит, что я подтвердил, что$identifier является строкой перед передачей ее в качестве аргумента одному из vehicleService методы и бросает мне PossiblyInvalidArgument ошибка, потому что Argument 1 ... expects string, possibly different type array<array-key, string>|null|string provided.

Как я могу убедиться, что PHP MD является строкой?

2 ответа

Я понял это после нескольких попыток. Мне нужно было поместить все внутрьif (is_string(...)) проверить:

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $identifier = $input->getArgument('identifier');
        if (is_string($identifier)) {
            if ($input->getArgument('mode') === "vehicle") {
                $this->vehicleService->getVehicleInfo($identifier);
                return null;
            }
            if ($input->getArgument('mode') === "company") {
                $this->vehicleService->getCompanyVehiclesInfo($identifier);
                return null;
            }
        } else {
            return 2;
        }
        return 1;
    }

По состоянию на март плагин Symfony Psalm правильно обрабатывает аргументы и опции. Больше не нужно обходных путей:)

Другие вопросы по тегам