call_user_func
用于回调函数,下面的两个例子,一个实现了在类外部使用parent,另一个不指定直接调用预置的__invoke函数。这两个是普通函数调用实现不了的,除此之外,call_user_func和普通函数调用没有区别。
class A {
public static function who() {
echo "A\n";
}
}
class B extends A {
public static function who() {
echo "B\n";
}
}
call_user_func(array('B', 'parent::who')); // A
/*===============================*/
class C {
public function __invoke($name) {
echo 'Hello ', $name, "\n";
}
}
$c = new C();
call_user_func($c, 'PHP!');
call_user_func_array和call_user_func几乎没有区别,只是call_user_func_array的第二个参数,也就是回调函数参数变成了数组形式,可以动态的进行参数扩展。
function a($vala) {
echo $vala;
};
function b($vala, $valb) {
echo $vala . "\t" . $valb;
};
$arr = array("1");
call_user_func_array('a', $arr);
$arr = array("1", "2");
call_user_func_array('b', $arr);