Problem with phpStan error : __toString() should return string but returns string|false

Problem with phpStan error : __toString() should return string but returns string|false

我的函数是__toString:

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

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

Method App\DTO\GenericMessageDTO::__toString() should return string but returns string|false.

我试过异常,但与我的 php 7.2 不兼容 它说 Throwing an exception from ''__toString' is only possible since PHP 7.4

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

我该如何解决这个问题?

您正在 return 直接从 json_encode 调用,并且此遗留函数具有 return 类型的 string|false,如 here 所述。如果由于任何原因它无法编码 $payload,它将 return false 而不是字符串。

正如您所发现的,除非您升级到 7.4(越快越好!:))

,否则不接受在 __toString() 中抛出异常

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

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