PHP中的callback是指在函數參數中傳遞一個函數作為參數,讓另外一個函數去執行這個傳遞進來的函數。這種做法的好處是提高了代碼的復用性和擴展性。
下面以數組排序為例,使用php callback來進行排序。我們可以先編寫一個自定義的排序函數mySort():
function mySort($a, $b){ if ($a == $b) { return 0; } return ($a< $b) ? -1 : 1; }
然后我們可以定義一個數組$arr:
$arr = array(3, 1, 5, 2, 7, 4);
使用php的uasort()函數可以進行自定義排序,其中第二個參數是一個callback函數名:
uasort($arr, 'mySort'); print_r($arr);
運行結果為:
Array ( [1] =>1 [3] =>2 [5] =>3 [6] =>4 [0] =>5 [2] =>7 )
除了具體的排序例子,callback在PHP中還有以下兩種常用的用途:
1、將一個函數作為參數傳遞給另一個函數
例如,我們可以先編寫一個用來處理數組的函數:
function arrHandle($arr, $func) { foreach($arr as $item) { $func($item); } }
然后定義一個處理數組的方法:
function process($item) { echo "item is:".$item."\n"; }
最后我們可以傳遞這個處理函數到數組處理函數中:
$arr = array(1, 2, 3); arrHandle($arr, 'process');
2、使用匿名函數
使用匿名函數可以不用專門為一個函數來分配一個函數名,可以更加靈活地使用callback。
$arr = array(1, 2, 3); arrHandle($arr, function($item){ echo "item is:".$item."\n"; });
這是使用callback的兩種常用場景。callback的應用廣泛,在PHP中提供了多種方法來使用callback,它極大地提高了代碼的靈活性和擴展性。