回呼函數將一個函數作為參數傳遞到呼叫的函數中。如果在函數的格式說明中出現 callback 類型的參數,則該函數就是回呼函數。 雖然可以使用變數函數去宣告自己的回呼函數,但最多的還是透過 call_user_func_array() 函數去實作。上一章節介紹了php回呼函數中的變數函數宣告和應用,使用變數函數將一個使用者自訂的執行過程傳遞到函數中使用,大大增加了使用者對函數功能的擴展,把一段自己定義的功能傳到函數內部使用。本節就實例說明下 call_user_func_array()函數。
函數call_user_func_array() 是PHP 中的內建函數,其實它也是回呼函數,其格式說明如下:
mixed call_user_func_array( callback function, array param_arr)
這個函數有兩個參數:第一個參數因為使用偽類型callback, 所以這個參數需要一個字串,表示要呼叫的函數名;第二個參數則是陣列類型的參數,表示參數列表,依照順訊一次會傳遞給要呼叫的函數。宣告一個函數,功能是輸出,目的是作為函數的回呼函數。
該函數的應用實例如下所示:
<?php // 声明一个函数fun(),功能是输出两个字符串,目的是作为call_user_func_array()函数的回调函数 function fun($str1, $str2){ echo "$str1 = ".$str1; echo "<br>"; echo "$str2 = ".$str2; } //通过系统函数call_user_func_array()调用函数fun() call_user_func_array("fun",array("php.cn","php中文网")); ?>
#在在上面的實例中,透過系統函數call_user_func_array () 呼叫自己定義的函數fun(),將函數fun() 的名稱字串傳遞給了call_user_func_array() 函數中的第一個參數,第二個參數則需要的是一個數組,數組中的元素個數必須和 fun()函數的參數列表和樹相同。因為這個陣列參數中的每個元素值都會經過 call_user_func_array() 函數 ,依照順序依序傳遞給回調到的函數 fun()參數清單中。所以我們可以將前面透過變數函數實現的自訂回呼函數,改成借助 call_user_func_array() 函數的方式實作。
其程式碼的範例如下:
<?php //声明回调函数filter, 在0-10的整数中通过自定义条件过滤不要的数字 function filter($fun){ for($i=0; $i<=10; $i++){ //使用系统函数call_user_func_array(),调用和变量$fun值相同的函数 if(call_user_func_array($fun,array($i))) continue; echo $i.'<br>'; } } ?>
在本例中,自訂的函數 filter()內部,將原先的變數函數位置改寫成藉助call_user_func_array() 函數的呼叫方式,而函數 filter()的應用方式則沒有改變。
這一章講解了php回呼函數的call_user_func_array()函數及其用法,下一章我們將介紹php回呼函數的類別靜態函數和物件的方法回呼。
【相關教學推薦】
3. php實戰影片教學
########以上是php函數之回呼函數(二) call_user_func_array() 函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!