当前位置:首页 > PHP教程 > php函数 > 列表

浅谈PHP中的call_user_func()与call_user_func_array()函数

发布:smiling 来源: PHP粉丝网  添加日期:2020-02-25 19:55:40 浏览: 评论:0 

本篇文章主要是对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:

  1. //先引用,后执行 
  2.  
  3. function _call($call){ 
  4.  
  5.     echo $call++.'<br/>'
  6.  
  7.     echo $call++.'<br/>'
  8.  
  9.     return $call
  10.  
  11.  
  12. $rs = call_user_func('_call',1); 
  13.  
  14. var_dump($rs); 
  15.  
  16. //结果 
  17.  
  18. //1 
  19.  
  20. //2 
  21.  
  22. //int(3) 

先执行,后引用

  1. $arg = 1; 
  2.  
  3. call_user_func(function ($call){ 
  4.  
  5.     echo ++$call.'<br/>'
  6.  
  7.     echo ++$call.'<br/>'
  8.  
  9. },$arg); 
  10.  
  11. //结果为2,3 

回调函数不传值,通过func_get_arg和func_get_args获取参数

  1. $argOne = 1; 
  2.  
  3. $argTwo = 2; 
  4.  
  5. call_user_func(function (){ 
  6.  
  7.     //获取第几个参数 
  8.  
  9.     $arg = func_get_arg(0); 
  10.  
  11.     var_dump($arg); 
  12.  
  13.     echo '<br/>'
  14.  
  15.     //获取所有的参数,并以数组的形式返回 
  16.  
  17.     $args = func_get_args(); 
  18.  
  19.     var_dump($args); 
  20.  
  21.     //获取参数个数 
  22.  
  23.     $argNum = func_num_args(); 
  24.  
  25.     echo "<br/>"
  26.  
  27.     var_dump($argNum); 
  28.  
  29. },$argOne,$argTwo); 
  30.  
  31.  
  32.  
  33. //结果为 
  34.  
  35. int(1)  
  36.  
  37. array(2) { [0]=> int(1) [1]=> int(2) }  
  38.  
  39. int(2) 

调用类方法:

调用类中的静态方法有两种形式,而调用public方法第一个参数只能为数组

  1. class Func{  
  2.  
  3.     static public function _One(){ 
  4.  
  5.         $str = "THE CLASS NAME IS".__CLASS__." AND CLASS STATIC METHOD IS ".__METHOD__
  6.  
  7.         $argNum = func_num_args(); 
  8.  
  9.         if($argNum){ 
  10.  
  11.             $arg = func_get_arg(0); 
  12.  
  13.             return $str.' and argument is '.$arg
  14.  
  15.         }else
  16.  
  17.             return $str
  18.  
  19.         } 
  20.  
  21.     }    
  22.  
  23.     public function _Two($num){ 
  24.  
  25.         return $num ? $num + 1 : $num
  26.  
  27.     } 
  28.   
  29.  
  30.  
  31. echo "<br/>"
  32.  
  33. //调用类的静态方法 
  34.  
  35. var_dump(call_user_func('Func::_One','one')); 
  36.  
  37. echo '<br/>'
  38.  
  39. var_dump(call_user_func(['Func','_One'])); 
  40.  
  41. $num = 4; 
  42.  
  43. $o = new Func; 
  44.  
  45. //调用类普通方法 
  46. //phpfensi.com 
  47. $return = call_user_func(array($o,'_Two'),$num); 
  48.  
  49. echo '<br/>'
  50.  
  51. 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的用法与上面的同理

  1. //调用静态方法 
  2.  
  3. call_user_func(array(__NAMESPACE__.'\StaticDemo','_One'),100); 
  4.  
  5. call_user_func('App\StaticDemo::_One',200); 
  6.  
  7. //调用public方法 
  8.  
  9. 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的参数二只能为数组。

Tags: call_user_func call_user_func_array

分享到: