【问题标题】:Problem with phpStan error : __toString() should return string but returns string|falsephpStan 错误的问题:__toString() 应该返回字符串但返回字符串|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);
}

我该如何解决这个问题?

【问题讨论】:

  • 你也许可以返回一个空字符串?这并不理想,因为您需要在每次(隐式)调用时检查自己是否出现问题,但似乎没有更好的解决方案。

标签: php types type-hinting phpstan


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    相关资源
    最近更新 更多