Неустранимая ошибка: объявление Foo::__toString(): void должно быть совместимо с Stringable::__toString(): string

После обновления до PHP 8 я теперь вижу это Fatal errorчто не так с моим кодом? И что это Stringable?

2 ответа

Решение

До PHP 8 программист мог писать магические методы с подписями, не соответствующими их внутренней подписи.

Так например

       class Foo {
    public function __toString(): void {
    
    }
}

Хотя возвращаемый тип voidне соответствует документации метода

       public __toString ( void ) : string

PHP не жаловался!

Однако с появлением PHP 8 подпись магического метода должна соответствовать документации этого магического метода.

       public function __toString(): string {

}

В противном случае вы увидите Fatal error!

Примечание. __construct() и __destruct() исключены из этого нового изменения, так как не существует концепции возврата значений почти на всех компьютерных языках.


Что это за Stringable?

Stringable - это интерфейс, который автоматически добавляется к классам, реализующим __toString() метод

См. RFC для получения дополнительной информации.

Вы должны реорганизовать свою функцию __toString() из:

public function __toString(): void {
  //definition
}

к функции возврата string значение.

public function __toString(): string {
  //definition
  return 'some string';
}
Другие вопросы по тегам