国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

淺談PHP中的call_user_func()與call_user_func_array()函數

2024-09-04 11:49:46
字體:
來源:轉載
供稿:網友

本篇文章主要是對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. //Vevb.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的參數二只能為數組。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 囊谦县| 定安县| 刚察县| 印江| 思茅市| 固阳县| 高雄县| 石首市| 旺苍县| 潼南县| 监利县| 昌都县| 浙江省| 庐江县| 安吉县| 安阳县| 苍南县| 莱州市| 庆城县| 宜川县| 丘北县| 昭苏县| 达孜县| 祁门县| 桓仁| 三明市| 台山市| 汾西县| 志丹县| 略阳县| 焉耆| 高淳县| 肥城市| 黄骅市| 沁源县| 陆川县| 安溪县| 滦南县| 夏邑县| 普洱| 池州市|