首頁  >  文章  >  後端開發  >  php回調類型(callback)

php回調類型(callback)

伊谢尔伦
伊谢尔伦原創
2016-11-24 13:53:051251瀏覽

自 PHP 5.4 起可用 callable 類型指定回呼類型 callback。本文檔基於同樣理由使用 callback 類型資訊。

一些函數如 call_user_func() 或 usort() 可以接受使用者自訂的回呼函數作為參數。回呼函數不只可以是簡單函數,還可以是物件的方法,包括靜態類別方法。

傳遞

一個 PHP 的函數以 string 類型傳遞其名稱。可以使用任何內建或使用者自訂函數,但除了語言結構例如: array(), echo, empty(), eval(), exit(), isset(), list(), print 或 unset()。

一個已實例化的對象的方法被作為數組傳遞,下標 0 包含該對象,下標 1 包含方法名。

靜態類別方法也可不經實例化該類別的物件而傳遞,只要在下標 0 中包含類別名稱而非物件。自 PHP 5.2.3 起,也可以傳遞 'ClassName::methodName'。

除了普通的使用者自訂函數外, create_function() 可以用來建立一個匿名回呼函數。自 PHP 5.3.0 起也可傳遞 closure 給回呼參數。

Example #1 回呼函數範例

<?php
 
// An example callback function
function my_callback_function() {
   echo &#39;hello world!&#39;;
}
 
// An example callback method
class MyClass {
   static function myCallbackMethod() {
       echo &#39;Hello World!&#39;;
   }
}
 
// Type 1: Simple callback
call_user_func(&#39;my_callback_function&#39;);
 
// Type 2: Static class method call
call_user_func(array(&#39;MyClass&#39;, &#39;myCallbackMethod&#39;));
 
// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, &#39;myCallbackMethod&#39;));
 
// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func(&#39;MyClass::myCallbackMethod&#39;);
 
// Type 5: Relative static class method call (As of PHP 5.3.0)
class A {
   public static function who() {
       echo "A\n";
   }
}
 
class B extends A {
   public static function who() {
       echo "B\n";
   }
}
 
call_user_func(array(&#39;B&#39;, &#39;parent::who&#39;)); // A
?>

Example #2 使用 Closure 的範例

<?php
// Our closure
$double = function($a) {
   return $a * 2;
};
 
// This is our range of numbers
$numbers = range(1, 5);
 
// Use the closure as a callback here to
// double the size of each element in our
// range
$new_numbers = array_map($double, $numbers);
 
print implode(&#39; &#39;, $new_numbers);
?>

以上程式會輸出:

2 4 6 8 10

Note: 在PHP 4 中,需要使用一個參考函數來建立一個特定物件的回調指向,而不是一個拷貝。參見引用的解釋。

Note:

在函數中註冊有多個回呼內容時(如使用 call_user_func() 與 call_user_func_array()),如在前一個回調中有未捕獲的異常,其後的將不再被調用。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn