[PHP] 如何寫callback function 召回函數(回呼函數) 『php callback function / PHP 函數指標』

[PHP] 如何寫callback function 召回函數(回呼函數) 『php callback function / PHP 函數指標』

[PHP] 如何寫callback function 召回函數(回呼函數) 『php callback function / PHP 函數指標』


資料來源: http://n.sfs.tw/content/index/10707


php可以使用 call_user_func()或 usort()函數來呼叫使用者自訂的callback fcunction

callback function本身也只是一個普通的函數或是類別中的靜態函數,以php官網的例子:

// An example callback function
function my_callback_function() {
    echo 'hello world!';
}
  
// An example callback method
class MyClass {
    static function myCallbackMethod() {
        echo 'Hello World!';
    }
}
  
// Type 1: Simple callback 直接回呼,注意函式並非在類別中,直接使用函式名即可,省略函式本身的小括號
call_user_func('my_callback_function'); 
  
// Type 2: Static class method call 回呼類別中的函式
call_user_func(array('MyClass', 'myCallbackMethod')); 
  
// Type 3: Object method call 以物件的方式回呼,要先宣告該物件
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
  
// Type 4: Static class method call (As of PHP 5.2.3) 同樣使用靜態方式回呼,建議寫法
call_user_func('MyClass::myCallbackMethod');

01.上面的回呼函式如果要帶參數進去,可以使用第二個係數

function increment(&$var, $var2)
{
    $var+=$var2;
}
 
$a = 3; $b=2;
// 放在 array中代入,注意這裡面沒有回傳,而是顯示傳址的 $a
call_user_func_array('increment', array(&$a,$b));
echo $a."\n"; //5

02.還有一個 closure 封裝的寫法(>PHP5.3),似乎是因為jquery而流行起來:

$cross = function($a,$b) {
    return $a * $b;
};
  
// This is our range of numbers
$num1 = range(1, 9);     //1 2 3 4 5 6 7 8 9
$num2 = range(3, 12, 3);  //3 6 9 12
  
// CALLBACK 函數的叫用方法
$ans = array_map($cross, $num1, $num2);  //array of 3 12 27 48 0 0 0 0 0

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *