本篇文章主要是对php中的call_user_func()与call_user_func_array()函数的作用以及使用方法做简要说明,感兴趣的朋友来学习一下吧。call_user_func:把一个参数作为回调函数调用
用法说明:
call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
参数说明:
第一个参数$callback作为回调函数,其它参数都是回调函数的参数。
$parameter:传入回调$callback函数的参数,这里的参数注意不能引用传递。
下面简单例子分别说明了在不同情况下使用call_user_func:
//先引用,后执行function _call($call){ echo $call++.'<br/>'; echo $call++.'<br/>'; return $call;}$rs = call_user_func('_call',1);var_dump($rs);//结果//1//2//int(3)
先执行,后引用
$arg = 1;call_user_func(function ($call){ echo ++$call.'<br/>'; echo ++$call.'<br/>';},$arg);//结果为2,3
回调函数不传值,通过func_get_arg和func_get_args获取参数
$argone = 1;$argtwo = 2;call_user_func(function (){ //获取第几个参数 $arg = func_get_arg(0); var_dump($arg); echo '<br/>'; //获取所有的参数,并以数组的形式返回 $args = func_get_args(); var_dump($args); //获取参数个数 $argnum = func_num_args(); echo "<br/>"; var_dump($argnum);},$argone,$argtwo);//结果为int(1) array(2) { [0]=> int(1) [1]=> int(2) } int(2)
调用类方法:
调用类中的静态方法有两种形式,而调用public方法第一个参数只能为数组
class func{ static public function _one(){ $str = "the class name is".__class__." and class static method is ".__method__; $argnum = func_num_args(); if($argnum){ $arg = func_get_arg(0); return $str.' and argument is '.$arg; }else{ return $str; } } public function _two($num){ return $num ? $num + 1 : $num; }}echo "<br/>";//调用类的静态方法var_dump(call_user_func('func::_one','one'));echo '<br/>';var_dump(call_user_func(['func','_one']));$num = 4;$o = new func;//调用类普通方法$return = call_user_func(array($o,'_two'),$num);echo '<br/>';var_dump($return);结果:string(79) "the class name isfunc and class static method is func::_one and argument is one" string(59) "the class name isfunc and class static method is func::_one" int(5)
调用有命名空间的类时call_user_func的用法与上面的同理
//调用静态方法call_user_func(array(__namespace__.'\staticdemo','_one'),100);call_user_func('app\staticdemo::_one',200);//调用public方法call_user_func(array($obj,'_two'),2,3,4);
最后:
和call_user_func函数类似的还有call_user_func_array,call_user_func_array的作用和call_user_func的作用一样,
不同的是call_user_func用回调函数处理字符,而call_user_func_array用回调处理数组,也就是说call_user_func_array的参数二只能为数组。
相关教程:php视频教程
以上就是浅谈php中的call_user_func()与call_user_func_array()函数的详细内容。