1

编辑这是 Psalm 的事情,而不是 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 这是一个字符串?

4

2 回答 2

1

经过几次尝试,我想通了。我需要把所有东西都放在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;
    }
于 2020-01-31T11:46:57.310 回答
0

截至 3 月,Symfony Psalm 插件可以正确处理参数和选项。不再需要解决方法了:)

于 2020-07-29T09:37:44.533 回答