3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?php header("Content-type: text/plain"); class Foo { /** * An indentifier * @var string */ private $name; /** * A reference to another Foo object * @var Foo */ private $link; public function __construct($name) { $this->name = $name; } public function setLink(Foo $link){ $this->link = $link; } public function __destruct() { echo 'Destroying: ', $this->name, PHP_EOL; } } // create two Foo objects: $foo = new Foo('Foo 1'); $bar = new Foo('Foo 2'); // make them point to each other $foo->setLink($bar); $bar->setLink($foo); // destroy the global references to them $foo = null; $bar = null; // we now have no way to access Foo 1 or Foo 2, so they OUGHT to be __destruct()ed // but they are not, so we get a memory leak as they are still in memory. // // Uncomment the next line to see the difference when explicitly calling the GC: gc_collect_cycles(); // // see also: http://www.php.net/manual/en/features.gc.php // // create two more Foo objects, but DO NOT set their internal Foo references // so nothing except the vars $foo and $bar point to them: $foo = new Foo('Foo 3'); $bar = new Foo('Foo 4'); // destroy the global references to them $foo = null; $bar = null; // we now have no way to access Foo 3 or Foo 4 and as there are no more references // to them anywhere, their __destruct() methods are automatically called here, // BEFORE the next line is executed: echo 'End of script', PHP_EOL; ?>
Output for 5.3.0 - 5.6.28, 7.0.0 - 7.1.0
Destroying: Foo 2 Destroying: Foo 1 Destroying: Foo 3 Destroying: Foo 4 End of script
Output for hhvm-3.10.0 - 3.13.2
Destroying: Foo 3 Destroying: Foo 4 End of script Destroying: Foo 2 Destroying: Foo 1
Output for 5.1.3 - 5.2.17
Fatal error: Call to undefined function gc_collect_cycles() in /in/X2Gh3 on line 47
Process exited with code 255.
Output for 5.0.2 - 5.1.2
Fatal error: Call to undefined function gc_collect_cycles() in /in/X2Gh3 on line 47 Destroying: Foo 1 Destroying: Foo 2
Process exited with code 255.
Output for 5.0.0 - 5.0.1
Fatal error: Call to undefined function gc_collect_cycles() in /in/X2Gh3 on line 47 Destroying: Foo 1 Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/X2Gh3 on line 27 PHP_EOLDestroying: Foo 2 Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/X2Gh3 on line 27 PHP_EOL
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/X2Gh3 on line 11
Process exited with code 255.
Output for 4.3.0 - 4.3.1, 4.3.5 - 4.4.1
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/X2Gh3 on line 11
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/X2Gh3 on line 11
Process exited with code 255.