为什么此代码会导致无限递归?PHP echo声明中的无限递归
class Foo {
public static function newFoo() { return new Foo(); }
public function __toString() {
return "{${Foo::newFoo()}}";
}
}
echo new Foo(); // Infinite recursion
new Foo(); // Finishes normally
这是因为__toString()
返回一个对象吗?但这是不可能的,因为根据文档
此方法必须返回一个字符串,否则会发出致命的E_RECOVERABLE_ERROR级错误。 (ref)
或者它只是在__toString()
方法中无限递归?
该方法返回一个字符串,但它返回,因为你把它周围的双引号将被评估的字符串。所以函数签名被满足,它返回一个字符串。邪恶的部分发生之后,因为字符串正在'eval()'d。 – Mjh