Неустранимая ошибка: объявление 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';
}