PHP一个典型的闭包实例

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


class Carts {
    
    const PRICE_BUTTER = 1.0;
    const PRICE_MILK = 3.0;
    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(self."::PRICE_".strtoupper($product));
            $total += ($pricePerItem * $quantity) * ($tax + 1.0);
        };
        array_walk($this->products,$callback);
        return round($total,2);
    }

}

//往购物车添加
$my_cart = new Carts();
$my_cart->add('butter',1);
$my_cart->add('milk',3);
$my_cart->add('eggs',6);
//打印税
echo $my_cart->getTotal(0.05);

 

posted @ 2016-03-14 11:58  北京流浪儿  阅读(353)  评论(0编辑  收藏  举报