[英]Understanding anonymous functions PHP
我一直在使用php學習web開發,我對匿名函數有點困惑。 特別是關於參數的傳遞以及它們如何在這樣的函數內工作。 例如,在代碼中
$array = array("really long string here, boy", "this", "middling length", "larger");
usort($array, function($a, $b) {
return strlen($a) - strlen($b);
});
print_r($array);
我真的不知道如何使用參數$a
和$b
。 我認為它們是為了比較而對數組進行排序,以確定函數應該如何使用它們並將它們從中取出?
在下一個代碼中
$mult = function($x)
{
return $x * 5;
};
echo $mult(2);
我知道參數直接傳遞給函數並用於返回乘法的結果。
在這篇文章中的例子
$arr = range(0, 10);
$arr_even = array_filter($arr, function($val) { return $val % 2 == 0; });
$arr_square = array_map(function($val) { return $val * $val; }, $arr);
變量$val
取自哪里?
我知道也許這並不像看起來那么復雜,但我真的很困惑在這種功能上使用參數
usort($array, function($a, $b) {
return strlen($a) - strlen($b);
});
我們來看看這個例子吧。 當您將函數傳遞給usort()
,PHP會在內部使用數組中的2個元素調用它,以查看哪個更大/更小。
在$a
和$b
值來自內部 usort()
函數。 它的代碼用2個參數調用提供的函數。 您的參數不需要命名為$a
和$b
,它們可以根據您的喜好命名。
你的問題實際上並不是關於匿名函數,而是關於傳遞calllables。
讓我們考慮你們中的第一個例子
usort($array, function($a, $b) {
return strlen($a) - strlen($b);
});
讓我們通過用命名函數替換匿名函數來重構它。
function compareAB($a, $b) {
return strlen($a) - strlen($b);
}
usort($array, 'comapreAB');
如你所見,你仍然可以問$a
和$b
是如何通過的。
嗯,答案很簡單。 usort
希望你提供帶有2個參數的callable,並在內部調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.