Infinite recursion in PHP echo statement -


why code cause infinite recursion?

class foo {     public static function newfoo() { return new foo(); }     public function __tostring() {         return "{${foo::newfoo()}}";     } }  echo new foo(); // infinite recursion new foo();      // finishes 

is because __tostring() returning object? can't possible because according docs

this method must return string, otherwise fatal e_recoverable_error level error emitted. (ref)

or infinitely recurse within __tostring() method?

echo new foo(); 

creates foo , tries echo it, casts object string invoking magic method __tostring.

in method, however, invoke static method foo::newfoo, returns new object, again casted string in __tostring itself, gets called again.

so yes, here infinite recursion.

to clarify:

public function __tostring() {     return "{${foo::newfoo()}}"; } 

is equivalent to

public function __tostring() {     $foo = foo::newfoo();     return "$foo"; // cast string, invokes __tostring() again. } 

Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -