老規矩,先上代碼再說話。
<?php function showArray($cols) {     foreach ($cols as $obj) {         echo $obj . " ";     }     echo "<br>"; } function showObj($obj) { echo $obj . " "; } //mswap传入的是引用类型。 function mswap(&$a, &$b) { $tmp = $a; $a = $b; $b = $tmp; } function bubbleSort(&$cols) { $len = count($cols); for ($i = 0; $i < $len; $i++) {         for ($j = 1; $j < $len - $i; $j++) {             if ($cols[$j - 1] > $cols[$j]) { mswap($cols[$j - 1], $cols[$j]); } } } } $data = array( 8, 2, 3, 9, 0, 45, 35, 235 ); //排序 bubbleSort($data); //打印数组 showArray($data); //使用回调函数依次遍历打印数组 array_map('showObj', $data); echo "<br>"; //使用匿名函数依次遍历打印数组 array_map(create_function('$obj', 'echo $obj." " ;'), $data); ?>程式的輸出:
程式碼的功能十分簡單,先初始化一個數組,然後對其排序,最後使用三種不同的方式將其列印輸出。
排序的演算法使用最簡單的冒泡排序,不做贅述。
需要注意的有:
(1)排序函數和交換函數都使用了傳遞引用的方法。若使用傳值方式的話,排序和交換函數不會生效,因為此時函數實際上操作的是參數物件的拷貝。
(2)array_map是php自帶的,其作用是為數組中的每個物件依序呼叫傳入的函數。此種方式稱為回呼。
(3)create_function可以建立一個匿名函數。在最後一個列印範例中,正是將其建立的匿名函數作為array_map的參數使用。
實際上有經驗的程式設計師都知道,不管是C++11還是php中,匿名函數的效率都偏低的。那為什麼還要使用匿名函數呢?為什麼C#和java的新標準也紛紛支持它?
因為有名函數雖然看起來直觀,但是存在著管理的代價。多一個函數,就多一個需要管理的地方。而且對於一個「微型」的程式碼片段而言,單獨為其編寫一個有名函數亦顯得程式碼不夠緊湊。然而這也絕不意味著匿名函數可以被濫用,在程式碼片段過大時,使用匿名函數會嚴重破壞可讀性。對匿名函數的使用要視情況而定。
以上就介紹了在php中使用匿名函數,包含了php,函數方面的內容,希望對PHP教學有興趣的朋友有幫助。