升级到 PHP 8 后,我现在看到Fatal error
我的代码有什么问题?这是什么Stringable
?
问问题
490 次
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 回答