美文网首页PHP
php之「匿名函数,闭包与应用」

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

作者: 木云先森 | 来源:发表于2020-03-03 18:35 被阅读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了,代码变得很简介了。上机多做练习,会有更深的映象。

相关文章

  • Modern PHP : 闭包和匿名函数

    Modern PHP : 闭包和匿名函数

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

    匿名函数 1.首先为名词解释,什么为匿名函数。很多时候概念是最饶人的。可以很直接的理解为,没有名字的函数。那匿名函...

  • php中的匿名函数和闭包

    php中的匿名函数和闭包(closure) 一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函...

  • php闭包函数(Closure)

    匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个...

  • PHP闭包(Closure)初探

    匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个...

  • [正儿八经PHP]PHP闭包(Closure)初探

    匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个...

  • PHP新特性之闭包、匿名函数

    闭包 闭包是什么? 1).闭包和匿名函数在PHP5.3中被引入。2).闭包是指在创建时封装函数周围状态的函数,即使...

  • 计算机概念100

    php闭包: 匿名函数 a){}程序闭包: 就是函数内部的函数流式文件: 二进制文件(不受物理符号(如回车符)...

  • php 闭包与匿名函数

    提到闭包和匿名函数似乎一下子就想到了 javascript ,但其实在很多语言中都有闭包的特性。但是 javasc...

  • Python中的闭包

    php对闭包的定义是匿名函数,我之前对python闭包的理解是:外部函数以内部函数作为返回值,称之为闭包!!!(错...

网友评论

    本文标题:php之「匿名函数,闭包与应用」

    本文链接:https://www.haomeiwen.com/subject/alzhlhtx.html