提问者:小点点

phpStan错误的问题:__toString()应该返回字符串,但返回字符串|false


我的函数是__toString

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

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

方法App\DTO\GenericMessageDTO::u toString()应返回字符串,但返回字符串| false。

我尝试了异常,但与我的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);
}

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


共1个答案

匿名用户

您直接从json_encode返回,此遗留函数的返回类型为string | false,如下所述。如果由于任何原因未能编码$payload,它将返回false,而不是字符串。

正如您所发现的,除非升级到7.4(越快越好),否则不接受在\uu toString()中抛出异常

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

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