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) ?: '';
}
我的函数是__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) ?: '';
}