0

升级到 PHP 8 后,我现在看到Fatal error我的代码有什么问题?这是什么Stringable

4

2 回答 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 回答