3v4l.org

run code in 300+ PHP versions simultaneously
<?php function userland_call_user_func($function, ...$args) { $class = isset(debug_backtrace()[1]['class']) ? debug_backtrace()[1]['class'] : null; return Closure::bind(function () use ($args, $function) { return $function(...$args); }, null, $class)->__invoke(); } class Test1 { private function foo() { echo new Exception; } public function callFoo($callfunc) { $new=new Test2; $callfunc(array($new, 'foo')); } } class Test2 { private function foo() { echo new Exception; } } $o = new Test1; $o->callFoo('userland_call_user_func'); $o->callFoo('call_user_func');

preferences:
27.87 ms | 404 KiB | 5 Q