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

首頁 > 語言 > PHP > 正文

PHP回調(diào)函數(shù)概念與用法實例分析

2024-09-04 11:49:28
字體:
供稿:網(wǎng)友

本文實例講述了PHP回調(diào)函數(shù)概念與用法。分享給大家供大家參考,具體如下:

一、回調(diào)函數(shù)的概念

先看一下C語言里的回調(diào)函數(shù):回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當(dāng)這個指針被用來調(diào)用其所指向的函數(shù)時,我們就說這是回調(diào)函數(shù)。回調(diào)函數(shù)不是由該函數(shù)的實現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時由另外的一方調(diào)用的,用于對該事件或條件進行響應(yīng)。

其他語言里的回調(diào)函數(shù)的概念與之相似,只不過各種語言里回調(diào)函數(shù)的實現(xiàn)機制不一樣,通俗的來說,回調(diào)函數(shù)是一個我們定義的函數(shù),但是不是我們直接來調(diào)用,而是通過另一個函數(shù)來調(diào)用,這個函數(shù)通過接收回調(diào)函數(shù)的名字和參數(shù)來實現(xiàn)對它的調(diào)用。

二、php中回調(diào)函數(shù)的實現(xiàn)

php提供了兩個內(nèi)置函數(shù)call_user_func()和call_user_func_array()提供對回調(diào)函數(shù)的支持。這兩個函數(shù)的區(qū)別是call_user_func_array是以數(shù)組的形式接收回調(diào)函數(shù)的參數(shù)的,看它的原型就知道了:mixed call_user_func_array ( callable $callback ,array$param_arr ),它只有兩個參數(shù)。而call_user_func($callback,參數(shù)1,參數(shù)2,…)的參數(shù)個數(shù)根據(jù)回調(diào)函數(shù)的參數(shù)來確定的。

如何實現(xiàn)對腳本中全局函數(shù)、類中未使用$this的非靜態(tài)方法、類中使用$this的非靜態(tài)方法(需要傳入對象)、類中靜態(tài)方法的回調(diào)呢,下面是測試通過的代碼。

  1. <?php 
  2. //普通函數(shù) 
  3. function f1($arg1,$arg2
  4.   echo __FUNCTION__.'exec,the args is:'.$arg1.' '.$arg2
  5.   echo "<br/>"
  6. //通過call_user_func調(diào)用函數(shù)f1 
  7. call_user_func('f1','han','wen'); 
  8.   //通過call_user_func_array調(diào)用函數(shù) 
  9. call_user_func_array('f1',array('han','wen')); 
  10. class A 
  11.   public $name
  12.   function show($arg1
  13.   { 
  14.     echo 'the arg is:'.$arg1."<br/>"
  15.     echo 'my name is:'.$this->name; 
  16.     echo "<br/>"
  17.   } 
  18.   function show1($arg1,$arg2
  19.   { 
  20.     echo __METHOD__.' exec,the args is:'.$arg1.' '.$arg2."<br/>"
  21.   } 
  22.   public static function show2($arg1,$arg2
  23.   { 
  24.     echo __METHOD__.' of class A exec, the args is:'.$arg1.' '.$arg2."<br/>"
  25.   } 
  26. //調(diào)用類中非靜態(tài)成員函數(shù),該成員函數(shù)中有$this調(diào)用了對象中的成員 
  27. $a = new A;//Vevb.com 
  28. $a->name = 'wen'
  29. call_user_func_array(array($a,'show',),array('han!')); 
  30. //調(diào)用類中非靜態(tài)成員函數(shù),沒有對象被創(chuàng)建,該成員函數(shù)中不能有$this 
  31. call_user_func_array(array('A','show1',),array('han!','wen')); 
  32. //調(diào)用類中靜態(tài)成員函數(shù) 
  33. call_user_func_array(array('A','show2'),array('argument1','argument2')); 

運行結(jié)果:

  1. f1exec,the args is:han wen 
  2. f1exec,the args is:han wen 
  3. the arg is:han! 
  4. my name is:wen 
  5. A::show1 exec,the args is:han! wen 
  6. A::show2 of class A exec, the args is:argument1 argument2 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 苗栗县| 化州市| 田阳县| 乐业县| 长垣县| 奉化市| 宁蒗| 淳安县| 富顺县| 海原县| 温泉县| 安西县| 罗城| 鄯善县| 始兴县| 阳新县| 都昌县| 卢湾区| 康保县| 山阳县| 东方市| 樟树市| 清河县| 海南省| 云和县| 邵东县| 昌黎县| 阿城市| 栾城县| 沙坪坝区| 宿迁市| 万宁市| 榕江县| 玛纳斯县| 亳州市| 同仁县| 林周县| 东方市| 松溪县| 浙江省| 梅河口市|