PHP回呼函數概念與用法

來源:互聯網
上載者:User

一、回呼函數的概念

先看一下C語言裡的回呼函數:回呼函數就是一個通過函數指標調用的函數。如果你把函數的指標(地址)作為參數傳遞給另一個函數,當這個指標被用來調用其所指向的函數時,我們就說這是回呼函數。回呼函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應。

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

二、php中回呼函數的實現

php提供了兩個內建函數call_user_func()call_user_func_array()提供對回呼函數的支援。這兩個函數的區別是call_user_func_array是以數組的形式接收回呼函數的參數的,看它的原型就知道了:mixed call_user_func_array ( callable $callback ,array$param_arr ),它只有兩個參數。而call_user_func($callback,參數1,參數2,…)的參數個數根據回呼函數的參數來確定的。

如何?對指令碼中全域函數、類中未使用$this的非靜態方法、類中使用$this的非靜態方法(需要傳入對象)、類中靜態方法的回調呢,下面是測試通過的代碼。

<?php//普通函數function f1($arg1,$arg2){  echo __FUNCTION__.'exec,the args is:'.$arg1.' '.$arg2;  echo "<br/>";}//通過call_user_func調用函數f1call_user_func('f1','han','wen');  //通過call_user_func_array調用函數call_user_func_array('f1',array('han','wen'));class A{  public $name;  function show($arg1)  {    echo 'the arg is:'.$arg1."<br/>";    echo 'my name is:'.$this->name;    echo "<br/>";  }  function show1($arg1,$arg2)  {    echo __METHOD__.' exec,the args is:'.$arg1.' '.$arg2."<br/>";  }  public static function show2($arg1,$arg2)  {    echo __METHOD__.' of class A exec, the args is:'.$arg1.' '.$arg2."<br/>";  }}//調用類中非靜態成員函數,該成員函數中有$this調用了對象中的成員$a = new A;$a->name = 'wen';call_user_func_array(array($a,'show',),array('han!'));//調用類中非靜態成員函數,沒有對象被建立,該成員函數中不能有$thiscall_user_func_array(array('A','show1',),array('han!','wen'));//調用類中靜態成員函數call_user_func_array(array('A','show2'),array('argument1','argument2'));

運行結果:

f1exec,the args is:han wenf1exec,the args is:han wenthe arg is:han!my name is:wenA::show1 exec,the args is:han! wenA::show2 of class A exec, the args is:argument1 argument2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.