首頁  >  文章  >  後端開發  >  php Callback 回呼函數詳解

php Callback 回呼函數詳解

怪我咯
怪我咯原創
2017-06-19 13:29:495819瀏覽

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

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

傳遞

一個 PHP 的函數以 string 型別傳遞其名稱。可以使用任何內建或使用者自訂函數,但除了語言結構例如: array() , echo , empty() , eval() , exit() , isset() , list() , exit() , isset() , list() , exit: 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 中,需要使用一個參考來建立一個指向具體物件的回呼函數,而不是一個拷貝。參見引用的解釋。

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

以上是php Callback 回呼函數詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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