- reset: documentation ( source)
<?php
function userland_call_user_func($function, ...$args) {
if (! is_array($function)) {
return $function(...$args);
}
$object = reset($function);
if (is_object($object)) {
return Closure::bind(function () use ($args, $function) {
return $function(...$args);
}, $object, get_class($object))->__invoke();
}
return $function(...$args);
}
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');