PHP

php之「匿名函数,闭包与应用」

2020-03-03  本文已影响0人  木云先森

匿名函数

1.首先为名词解释,什么为匿名函数。很多时候概念是最饶人的。可以很直接的理解为,没有名字的函数。那匿名函数和常规函数的区别是什么,匿名函数是一个表达式,而非一个语句
2.语法

function (){
   //语句
};

tip:①语法很简单②后边有分号,也可以理解为一种语句。

3.举例更直观

function ($params){
   echo $params;
}

闭包

1.闭包是指在创建时封装周围状态的函数,即便闭包所在的环境不存在了,闭包中封装的状态依然存在。概念还是非常的晦涩的。

2.语法

function () use(){
  //语句
}

3.举例更直观

1.函数中封装闭包
function content()
{
    $func = function($params){
        echo $params;
    };
    $func('hello');
}
//调用
content();
//输出
hello
2.函数封装并返回
function content()
{
    $func = function($params){
        echo $params;
    };
    return $func;
}
//调用并输出
echo content()('hello');
//输出
hello

tip:上面的调用比较能说明问题,content()这种看似是平常的调用,当前作为一个匿名函数。所以后面按函数的语法,再加入括号和参数即可。

3.匿名函数当做参数传入
//定义普通函数
function content($func)
{
    $func('hello'); 
}
//定义匿名函数
$func = function($params)
{
    echo $params;
};
//调用
echo content($func);
//输出
hello

4.应用use关键字

function content($params)
{  
    //use关键字可以使用外部的数据
    $func = function() use($params){
        echo $params;
    };
    $func();
}
//调用
content('hello');
//输出
hello

tip:use关键字的功能和作用就是可以使用外部的数据。

实战应用

1.实战业务场景,当前自己在电商行业,就拿电商场景做说明。电商的购物车结算页面,需要支付的总值,不仅受本身商品价格的影响,还受到促销的影响。当前的逻辑为,知道了购物车的总价,需要减去商品促销,订单促销和优惠券。算出最终的实付金额。

2.实战代码

/应用
class promotion{

    private $promotionData = [];

    public function add(string $promotionType, int $discountPrice) :bool
    {
        return $this->promotionData[$promotionType] = $discountPrice;
    }

    public function getTotal($total)
    {
        //封装闭包当回调函数使用
        $callFunc = function(int $discountPrice) use(&$total){
            $total -= $discountPrice;
        };
        array_walk($this->promotionData, $callFunc);
        //输出逻辑
        echo $total;
    }
}

$promotion = new promotion();
//商品促销
$promotion ->add('goodsPromotion',200);
//订单促销
$promotion ->add('tradePromotion',100);
//优惠券
$promotion ->add('couponPromotion',50);
//打印
print $promotion->getTotal(900) . "\n";
输出
550

tip:大家是不是看到循环的for或是foreach了,代码变得很简介了。上机多做练习,会有更深的映象。

上一篇 下一篇

猜你喜欢

热点阅读