call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数
说明
call_user_func_array (callable $callback , array $param_arr) : mixed
把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。参数
- callback:被调用的回调函数。
- param_arr:要被传入回调函数的数组,这个数组得是索引数组。
返回值 :返回回调函数的结果。如果出错的话就返回 FALSE
示例
示例 1:使用 call_user_func_array 执行 fnCallBack 函数
function fnCallBack($msg1 , $msg2){
echo 'msg1:'.$msg1;
echo "<br />\n";
echo 'msg2:'.$msg2;
}
$fnName = "fnCallBack";
$params = ['hello' , 'world'];
call_user_func_array($fnName , $params);
示例 2:使用 call_user_func_array 调用静态方法
namespace Foobar;
class MyClass
{public static function fnCallBack( $msg1 , $msg2)
{
echo 'msg1:'.$msg1;
echo "<br />\n";
echo 'msg2:'.$msg2;
}
}
//call_user_func_array([ 'MyClass', 'fnCallBack'] , ['hello' , 'world']);
call_user_func_array(__NAMESPACE__ .'\MyClass::fnCallBack' , [ 'hello' , 'world']);
示例 3:使用 call_user_func_array 调用对象方法
class MyClass
{
private $name = 'abc';
public function fnCallBack($msg1 = 'default msg1' , $msg2 = 'default msg2')
{
echo 'object name:'.$this->name;
echo "<br />\n";
echo 'msg1:'.$msg1;
echo "<br />\n";
echo 'msg2:'.$msg2;
}
}
$myobj = new MyClass();
call_user_func_array([ $myobj, 'fnCallBack'] , ['hello' , 'world']);
使用场景
1. 动态调用普通函数时,比如参数和调用方法名称不确定的时候很好用,函数名可以用参数的方式传递进去,因而调用不同函数。
配合 func_get_args() 函数接收参数到数组中,参数的个数也不一致。
function sayEnglish($fName, $content) {echo 'I am' . $content;}
function sayChinese($fName, $content, $country) {
echo $content . $country;
echo "<br>";
}
function say() {$args = func_get_args();
call_user_func_array($args[0], $args);
}
say('sayChinese', '我是', '中国人');
say('sayEnglish', 'Chinese');
2. 不需要判断函数类型,无论是普通函数,类的静态方法或者类的方法,均直接调用,你就不用去判断方法的类型。
A::sayChinese 是类的静态方法 通过 call_user_func_array,依然可以调用。
class A {public static function sayChinese($fName, $content, $country) {echo '你好'}
}
function say() {$args = func_get_args();
call_user_func_array(['A', 'sayChinese'], $args);
}
正文完
有偿技术支持加微信