3v4l.org

run code in 300+ PHP versions simultaneously
<?php // Current output: // TestWithPublicMethods@enter OK // TestWithPrivateMethods@enter OK // TestWithPublicMethods@leave OK // // Warning: (Registered shutdown functions) Unable to call TestWithPrivateMethods::leave() - function does not exist in Unknown on line 0 // Expected: // TestWithPublicMethods@enter OK // TestWithPrivateMethods@enter OK // TestWithPublicMethods@leave OK // TestWithPrivateMethods@leave OK class TestWithPublicMethods { public function test() { spl_autoload_register([ $this, 'enter' ], true, true); register_shutdown_function([ $this, 'leave' ]); } public function enter() { eval('class TestWithPublicMethodsAutoload {}'); echo __CLASS__ . '@' . __FUNCTION__ . " OK\n"; } public function leave() { echo __CLASS__ . '@' . __FUNCTION__ . " OK\n"; } } (new TestWithPublicMethods)->test(); new TestWithPublicMethodsAutoload; class TestWithPrivateMethods { public function test() { spl_autoload_register([ $this, 'enter' ], true, true); register_shutdown_function(Closure::fromCallable([$this, 'leave' ])); } private function enter() { eval('class TestWithPrivateMethodsAutoload {}'); echo __CLASS__ . '@' . __FUNCTION__ . " OK\n"; } private function leave() { echo __CLASS__ . '@' . __FUNCTION__ . " OK\n"; } } (new TestWithPrivateMethods)->test(); new TestWithPrivateMethodsAutoload;
Output for 7.1.25 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
TestWithPublicMethods@enter OK TestWithPrivateMethods@enter OK TestWithPublicMethods@leave OK TestWithPrivateMethods@leave OK

preferences:
131.38 ms | 408 KiB | 5 Q