phpStan 错误的问题:__toString() 应该返回字符串但返回字符串|false
Posted
技术标签:
【中文标题】phpStan 错误的问题:__toString() 应该返回字符串但返回字符串|false【英文标题】:Problem with phpStan error : __toString() should return string but returns string|false 【发布时间】:2020-06-12 18:20:09 【问题描述】:我的功能是__toString
:
public function __toString(): string
return json_encode($this->payload);
这是我从 phpStan 收到的错误,阻止我提交:
方法 App\DTO\GenericMessageDTO::__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
,如here 所述。如果由于某种原因无法对$payload
进行编码,它将返回false
而不是字符串。
正如您所发现的,除非您升级到 7.4,否则不接受在 __toString()
中抛出异常(越早越好!:))
这将是修复您的toString()
声明的简单方法,以确保您始终返回一个字符串。
public function __toString(): string
return json_encode($this->payload) ?: '';
【讨论】:
以上是关于phpStan 错误的问题:__toString() 应该返回字符串但返回字符串|false的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 错误:方法 Illuminate\View\View::__toString() 不能抛出异常