Проблема с ошибкой phpStan: __toString () должна возвращать строку, но возвращает строку | ложь - PullRequest
1 голос
/ 28 февраля 2020

Моя функция __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 Ответ

2 голосов
/ 28 февраля 2020

Вы возвращаетесь из json_encode напрямую, и эта унаследованная функция имеет тип возврата string|false, как описано здесь . Если по какой-либо причине он не сможет кодировать $payload, он вернет false вместо строки.

И, как вы обнаружили, создание исключения в __toString() не допускается, если вы не обновитесь до 7.4 ( чем скорее, тем лучше! :))

Это будет простой способ исправить вашу декларацию toString(), чтобы вы всегда возвращали строку.

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