从 PHP 5.3 开始提供匿名函数。
匿名函数在 PHP 中已经存在很长时间了:create_function从 PHP 4.0.1 开始就已经存在。但是,您说得对,从 PHP 5.3 开始有一个新的概念和语法可用。
我应该使用它们还是避免它们?如果是这样,怎么做?
如果您以前曾经使用create_function
过,那么新语法可以简单地滑到您使用它的地方。正如其他答案所提到的,一个常见的情况是“一次性”功能,它们只能使用一次(或至少在一个地方)。通常以回调的形式出现,例如array_map / reduce / filter、preg_replace_callback、usort等。
使用匿名函数计算字母出现在单词中的次数的示例(这可以通过多种其他方式完成,这只是一个示例):
$array = array('apple', 'banana', 'cherry', 'damson');
// For each item in the array, count the letters in the word
$array = array_map(function($value){
$letters = str_split($value);
$counts = array_count_values($letters);
return $counts;
}, $array);
// Sum the counts for each letter
$array = array_reduce($array, function($reduced, $value) {
foreach ($value as $letter => $count) {
if ( ! isset($reduced[$letter])) {
$reduced[$letter] = 0;
}
$reduced[$letter] += $count;
}
return $reduced;
});
// Sort counts in descending order, no anonymous function here :-)
arsort($array);
print_r($array);
这给出了(为简洁起见):
Array
(
[a] => 5
[n] => 3
[e] => 2
... more ...
[y] => 1
)