Проблема с ошибкой phpStan: __toString() должен возвращать строку, но возвращает строку |false
Моя функция __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
, как описано здесь. Если по какой-либо причине не удается кодировать$payload
, он вернется false
вместо строки.
И, как вы обнаружили, исключение в __toString()
не принимается, если вы не обновитесь до 7.4 (чем раньше, тем лучше!:))
Это был бы простой способ исправить вашу toString()
декларацию, чтобы всегда возвращать строку.
public function __toString(): string
{
return json_encode($this->payload) ?: '';
}