php匿名函数(二、使用场景)

前文提到了匿名函数的基本用法,你可以看出 匿名函数的作用普通函数完全能够解决,并且相对于匿名函数他更容易阅读和维护,那么你会产生疑问:那匿名函数存在的意义是什么?

//写一个匿名函数作为回调
$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_函数,就能找到很多。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值