3v4l.org

run code in 300+ PHP versions simultaneously
<?php class TrampolineTest { public function __call(string $name, array $arguments) { echo 'Trampoline for ', $name, PHP_EOL; } } $o = new TrampolineTest(); $callback1 = [$o, 'trampoline1']; $callback2 = [$o, 'trampoline2']; spl_autoload_register($callback1); spl_autoload_register($callback2); spl_autoload_register($callback1); // 2nd call ignored var_dump(spl_autoload_functions()); var_dump(class_exists("TestClass", true)); echo "Unregister trampoline:\n"; var_dump(spl_autoload_unregister($callback1)); var_dump(spl_autoload_unregister($callback1)); var_dump(spl_autoload_unregister($callback2)); var_dump(spl_autoload_functions()); var_dump(class_exists("TestClass", true));
Output for 8.1.14 - 8.1.33, 8.2.1 - 8.2.29, 8.3.0 - 8.3.26, 8.4.1 - 8.4.13
array(2) { [0]=> array(2) { [0]=> object(TrampolineTest)#1 (0) { } [1]=> string(11) "trampoline1" } [1]=> array(2) { [0]=> object(TrampolineTest)#1 (0) { } [1]=> string(11) "trampoline2" } } Trampoline for trampoline1 Trampoline for trampoline2 bool(false) Unregister trampoline: bool(true) bool(false) bool(true) array(0) { } bool(false)
Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.13, 8.2.0
array(3) { [0]=> array(2) { [0]=> object(TrampolineTest)#1 (0) { } [1]=> string(11) "trampoline1" } [1]=> array(2) { [0]=> object(TrampolineTest)#1 (0) { } [1]=> string(11) "trampoline2" } [2]=> array(2) { [0]=> object(TrampolineTest)#1 (0) { } [1]=> string(11) "trampoline1" } } Trampoline for trampoline1 Trampoline for trampoline2 Trampoline for trampoline1 bool(false) Unregister trampoline: bool(false) bool(false) bool(false) array(3) { [0]=> array(2) { [0]=> object(TrampolineTest)#1 (0) { } [1]=> string(11) "trampoline1" } [1]=> array(2) { [0]=> object(TrampolineTest)#1 (0) { } [1]=> string(11) "trampoline2" } [2]=> array(2) { [0]=> object(TrampolineTest)#1 (0) { } [1]=> string(11) "trampoline1" } } Trampoline for trampoline1 Trampoline for trampoline2 Trampoline for trampoline1 bool(false)

preferences:
106.97 ms | 410 KiB | 5 Q