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

    PHP 手册中的匿名函数关联用法分析

    藏色散人藏色散人2019-09-12 17:55:57转载288

    匿名函数

    匿名函数 也叫 闭包函数 (closures),可以创建一个没有指定名称的函数,一般作用于回调函数 (callback) 参数的值。匿名函数目前是通过 Closure 类来实现的。

    1. 我们平时可能用到的相关函数举例

    <?php
    //array_reduce 将回调函数 callback 迭代地作用到 array 数组中的每一个单元中,从而将数组简化为单一的值。
    $array = [1, 2, 3, 4];
    $str = array_reduce($array, function ($return_str, $value) {
        $return_str = $return_str . $value;  //层层迭代
        return $return_str;
    });
    //1.第一次迭代  $return_str = '',value = '1' 返回 '1'
    //2.第二次迭代  $return_str = '1',value = '2'  返回 '12'
    //3.第三次迭代  $return_str = '12',value = '3'  返回 '123'
    //4.第四次迭代  $return_str = '123',value = '4'  返回 '1243'
    var_dump($str);
    // string('12345')
    // array_walk — 使用用户自定义函数对数组中的每个元素做回调处理 
    $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
    function test_alter(&$item1, $key, $prefix)
    {
        $item1 = "$prefix: $item1";
    }
    function test_print($item2, $key)
    {
        echo "$key. $item2<br/>\n";
    }
    echo "Before ...:\n";
    array_walk($fruits, 'test_print');
    array_walk($fruits, 'test_alter', 'fruit');
    echo "... and after:\n";
    array_walk($fruits, 'test_print');
    ?>

    2. 实际业务用法

    <?php
    // 一个基本的购物车,包括一些已经添加的商品和每种商品的数量。
    // 其中有一个方法用来计算购物车中所有商品的总价格,该方法使
    // 用了一个 closure 作为回调函数。
    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
    ?>

    ---- 以上内容来自官方手册,可供参考

    以上就是PHP 手册中的匿名函数关联用法分析的详细内容,更多请关注php中文网其它相关文章!

    phpstudy集成环境下载
    本文转载于:learnku,如有侵犯,请联系a@php.cn删除
    专题推荐:PHP 匿名函数
    上一篇:PHP 不得不提的 session 与 cookie 下一篇:php路由有什么好处

    相关文章推荐

    • php匿名函数是什么?php匿名函数的使用介绍• 从匿名函数(闭包特性)到 PHP 设计模式之容器模式• 【PHP学习】 匿名函数的六个使用技巧• PHP匿名函数可以干什么用

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网