簡體   English   中英

理解PHP的匿名函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM