Псалом: метод 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 правильно обрабатывает аргументы и опции. Больше не нужно обходных путей:)