Почему этот код вызывает бесконечную рекурсию?Бесконечная рекурсия в выражении эха PHP
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