升级到 PHP 8 后,我现在看到Fatal error我的代码有什么问题?这是什么Stringable?
2 回答
1
在 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。
于 2020-10-22T08:18:22.370 回答
0
您必须从以下方面重构您的功能__toString():
public function __toString(): void {
//definition
}
函数返回string值。
public function __toString(): string {
//definition
return 'some string';
}
于 2020-10-25T09:17:01.127 回答