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