前文提到了匿名函数的基本用法,你可以看出 匿名函数的作用普通函数完全能够解决,并且相对于匿名函数他更容易阅读和维护,那么你会产生疑问:那匿名函数存在的意义是什么?
//写一个匿名函数作为回调
$arr = [1,2,3];
$callback = function($var){
return ++$var;
};
$new_arr = array_map($callback, $arr);
print_r($new_arr);
//这样的写法更简洁些。
$new_arr = array_map(function($var){
return ++$var;
}, $arr);
print_r($new_arr);
function key_compare_func($key1, $key2)
{
if ($key1 == $key2)
return 0;
else if ($key1 > $key2)
return 1;
else
return -1;
}
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
$new_arr = array_diff_ukey($array1, $array2, 'key_compare_func');
var_dump($new_arr);
//或者这样
$new_arr = array_diff_ukey($array1, $array2, function($key1, $key2){
if ($key1 == $key2)
return 0;
else if ($key1 > $key2)
return 1;
else
return -1;
});
var_dump($new_arr);
$arr = ['id'=>1,'name'=>'zhangsan','age'=>18];
array_walk($arr,function(&$val,$key){
if($key=='age'){
++$val;
}
});
print_r($arr);
//在对象中的使用,拿手册的例子做了简单修改
class Cart
{
protected $products = array();
public function add($product, $price, $quantity)
{
$this->products[$product] = $price * $quantity;
}
public function getTotal($tax)
{
$total = 0.00;
$callback = function ($pricePerItem, $product) use ($tax, &$total){
$total += ($pricePerItem) * ($tax + 1.0);
};
array_walk($this->products, $callback);
return round($total, 2);
}
}
$my_cart = new Cart;
// 往购物车里添加条目
$my_cart->add('butter', 1,1);
$my_cart->add('milk', 3,1);
$my_cart->add('eggs', 6,1);
// 打出出总价格,其中有 5% 的销售税.
print $my_cart->getTotal(0.05) . "\n";
总结:
1、匿名函数一般不会拿来单独使用,通常配合函数来进行回调处理。
2、手册中有许多这样的函数,你检索array,查看array_函数,就能找到很多。