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);
时间: 2024-11-08 19:15:19

PHP一个典型的闭包实例的相关文章

一个典型的PHP分页实例代码分享

一个典型的PHP分页实例代码分享,学习php的朋友肯定用得到,主要是了解思路. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <hea

js 闭包实例

var db = (function() { // 创建一个隐藏的object, 这个object持有一些数据 // 从外部是不能访问这个object的 var data = {}; // 创建一个函数, 这个函数提供一些访问data的数据的方法 return function(key, val) { if (val === undefined) { return data[key] } // get else { return data[key] = val } // set } // 我们可

C++多态性的一个典型例子(转)

本文摘录自C++多态性的一个典型例子. 例题:先建立一个Point(点)类,包含数据成员x,y(坐标点).以它为基类,派生出一个Circle(圆)类,增加数据成员r(半径),再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高).要求编写程序,重载运算符“<<”和“>>”,使之能用于输出以上类对象. 这个例题难度不大,但程序很长.对于一个比较大的程序,应当分成若干步骤进行.先声明基类,再声明派生类,逐级进行,分步调试. 1. 声明基类Point

分享一个批量导出当前实例下的所有linkedserver脚本

原文:分享一个批量导出当前实例下的所有linkedserver脚本 分享一个批量导出当前实例下的所有linkedserver脚本 很多时候,我们都需要导出实例下面的登录用户,job,linkedserver等等 导出job比较复杂,下午写了一个脚本把所有的linkedserver导出来,但是密码不会显示出来 下面脚本在SQL2008 R2下面测试通过 -- ============================================= -- Author: <桦仔> -- Blog

【CentOS】一个简单的Expect实例详解

Expect是基于Tcl的相对简单的一个免费的基本变成工具语言,用于实现自动和交互式任务程序进行通信,无须人工干预. 一.Expect的安装检查与Linux系统的实验环境 1.Expect的安装 [[email protected]]# rpm -qa expect expect-5.43.0-8.el5 expect-5.43.0-8.el5 #如果未安装expect,可以通过yum进行安装 [[email protected]]# yum install expect -y 2.Linux的

高级I/O复用技术:Epoll的使用及一个完整的C实例

高性能的网络服务器需要同时并发处理大量的客户端,而采用以前的那种对每个连接使用一个分开的线程或进程方法效率不高,因为处理大量客户端的时候,资源的使用及进程上下文的切换将会影响服务器的性能.一个可替代的方法是在一个单一的线程中使用非阻塞的I/O(non-blocking I/O).         这篇文章主要介绍linux下的epoll(7)方法,其有着良好的就绪事件通知机制.我们将会使用C来展现一个完整的TCP服务器实现代码.Epoll是被linux2.6开始引进的,但是不被其他的类UNIX系

php中实现的一个curl批处理的实例

curl是利用URL语法在命令行方式下工作的开源文件传输工具 本文在php中实现了的一个curl批处理的实例. 代码如下: 1 header("Content-Type:text/html;charset=utf8"); 2 3 /* 先获取两个页面的所有a标签 */ 4 // 初始化两个简单处理句柄 5 $ch1 = curl_init(); 6 $ch2 = curl_init(); 7 curl_setopt_array($ch1,array( 8 CURLOPT_URL =&g

C#中一个窗口是一个类呢,还是一个窗口类的实例呢?(转)

C#中一个窗口是一个类呢,还是一个窗口类的实例呢? 答: 没有一个人说到重点上. 一个窗口,它不是仅仅用一个类可以描述的: 首先,这个窗口的数据类型类型,是从Form类派生下来的,也就是说它的定义是一个类. 但是,这个窗口仅仅定义是不能存在于现实中的,它要借助于Application类才能够诞生,才能够开始运行,但是诞生的,不是这个类,而是这个从Form类派生下来的类的一个或者某个实例. 谈到Application类,就不能不提起Program类:因为Application类必须在Program

1.3—一个典型的JAVA程序的编写和运行过程

JAVA语言应用范围 桌面应用编程 WEB客户端编程 WEB服务器编程 手机编程 机器人编程 第一个JAVA程序 JAVA开发环境搭建 下载:Download J2SDK (Java  2 Software  Development Kit) from http://java.sun.com 安装:run the executable(跟普通软件安装一样,点击下一步就OK!)  环境变量配置: 环境变量(就是为相关命令提供一个路径信息,告诉他到哪里去找相关文件信息): 设置: 新增系统环境变量J