• 技术文章 >后端开发 >php教程

    聊聊php闭包官方写法有什么好处

    藏色散人藏色散人2021-12-29 14:55:15转载2212

    首先了解一下官方解释的PHP匿名函数:https://www.php.net/manual/zh/functions.anonymous.php

    php闭包官方写法有什么好处 ?

    具体问题描述:

    <?php
    class Cart
    {
        const PRICE_BUTTER  = 1.00;
        const PRICE_MILK    = 3.00;
        const PRICE_EGGS    = 6.95;
        protected $products = array();
        public function add($product, $quantity)
        {
            $this->products[$product] = $quantity;
        }
        public function getQuantity($product)
        {
            return isset($this->products[$product]) ? $this->products[$product] :
                FALSE;
        }
        public function getTotal($tax)
        {
            $total = 0.00;
            $callback =
                function ($quantity, $product) use ($tax, &$total)
                {
                    $pricePerItem = constant(__CLASS__ . "::PRICE_" .
                        strtoupper($product));
                    $total += ($pricePerItem * $quantity) * ($tax + 1.0);
                };
            array_walk($this->products, $callback);
            return round($total, 2);
        }
    }
    $my_cart = new Cart;
    // 往购物车里添加条目
    $my_cart->add('butter', 1);
    $my_cart->add('milk', 3);
    $my_cart->add('eggs', 6);
    // 打出出总价格,其中有 5% 的销售税.
    print $my_cart->getTotal(0.05) . "\n";
    // 最后结果是 54.29
    ?>
    Copy
            $callback =
                function ($quantity, $product) use ($tax, &$total)
                {
                    $pricePerItem = constant(__CLASS__ . "::PRICE_" .
                        strtoupper($product));
                    $total += ($pricePerItem * $quantity) * ($tax + 1.0);
                };

    这段代码和 foreach 来做有什么区别那?循环次数和规模应该是一样的?

    回答:

    可以让代码能更多的被复用,让提供的功能具有更多可能性。

    比如排序,无非就是比较大小,然后交换位置,交换位置的逻辑是统一的,但是比大小就存在很多情况,所以就会提供闭包回调,让使用它的地方可以自己决定谁大谁小。

    另一个就是通过一些基本方法,让代码更具可读性。

    比如你的列子里改成 array_reduce 应该更贴切点,这样别人一看,大概就能意识到,你这段是要计算什么值到单一变量。不过最好就直接把闭包函数写在参数里。

    对于数组的遍历,在早期的时候,foreach 会有很多问题,不当的使用,会制造不必要的 bug。

    比如

    // 这样用,可能会在后续的逻辑中出现bug
    foreach ($arr as &$item) {
       $item['ddd'] = 'ddd';
    }
    // 这样用,就可以避免
    array_walk($arr, function (&$item) {
       $item['ddd'] = 'ddd';
    });

    反正就是有利有弊,速度当然会有影响。

    推荐学习:《PHP视频教程

    以上就是聊聊php闭包官方写法有什么好处的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:learnku,如有侵犯,请联系admin@php.cn删除
    专题推荐:php
    上一篇:总结php-fpm的一系列启动操作 下一篇:PHP开发之Docker布置开发环境
    千万级数据并发解决方案

    相关文章推荐

    • php闭包的优缺点• PHP+Swoole的闭包写法• php闭包的好处• PHP 闭包之变量作用域• 什么是闭包函数?闭包函数的作用是什么?(附代码)
    1/1

    PHP中文网