1

我的功能是__toString

public function __toString(): string
{
    return json_encode($this->payload);
}

这是我从 PhpStan 收到的错误,阻止我提交:

方法 App\DTO\GenericMessageDTO::__toString() 应该返回字符串但返回字符串|假。

我尝试了异常但与我的 php 7.2 不兼容它说从 ''__toString'' 抛出异常只有在 PHP 7.4 之后才有可能

public function __toString(): string
{
    if ($this->payload === false) {
        throw new \Exception("No payload");
    }
    return json_encode($this->payload);
}

我怎样才能解决这个问题?

4

1 回答 1

2

您是从json_encode直接返回的,并且此遗留函数的返回类型为,如此string|false所述。如果由于任何原因无法进行编码,它将返回而不是字符串。$payloadfalse

__toString()正如您所发现的,除非您升级到 7.4,否则不接受抛出异常(越早越好!:))

这将是一种修复toString()声明的简单方法,以确保您始终返回一个字符串。

public function __toString(): string
{
    return json_encode($this->payload) ?: '';
}
于 2020-02-28T16:52:47.283 回答