PHP回調函數用法及分析

一、回調函數的概念

先看一下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調用函數f1
call_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!'));
//調用類中非靜態成員函數,沒有對象被創建,該成員函數中不能有$this
call_user_func_array(array('A','show1',),array('han!','wen'));
//調用類中靜態成員函數
call_user_func_array(array('A','show2'),array('argument1','argument2'));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章