文档章节

PHP闭包函数的使用

eatnothing
 eatnothing
发布于 2016/02/13 18:08
字数 416
阅读 98
收藏 5

##PHP闭包函数的使用

匿名函数也叫闭包函数(closures允许创建一个没有指定没成的函数,最经常用作回调函数参数的值。

__闭包函数__没有函数名称,直接在function()传入变量即可 使用时将定义的变量当作函数来处理

	$cl = function($name){
		return sprintf('hello %s',name);
	}
	echo $cli('fuck')`

直接通过定义为匿名函数的变量名称来调用

echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');`

###使用use

$message = 'hello';
$example = function() use ($message){
    var_dump($message);
};
echo $example();
//输出hello
$message = 'world';
//输出hello 因为继承变量的值的时候是函数定义的时候而不是 函数被调用的时候
echo $example();
//重置为hello
$message = 'hello';
//此处传引用
$example = function() use(&$message){
  var_dump($message);
};
echo $example();
//输出hello
$message = 'world';
echo $example();
//此处输出world
//闭包函数也用于正常的传值
$message = 'hello';
$example = function ($data) use ($message){
    return "{$data},{$message}";
};

echo $example('world');

###example

class Cart{
    //在类里面定义常量用 const 关键字,而不是通常的 define() 函数。
    const PRICE_BUTTER = 1.00;
    const PRICE_MILK   = 3.00;
    const PRICE_EGGS   = 6.95;

    protected $products = [];
    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.0;
        $callback = function($quantity,$product) use ($tax , &$total){
            //constant 返回常量的值
            //__class__返回类名
            $price = constant(__CLASS__."::PRICE_".strtoupper($product));

            $total += ($price * $quantity)*($tax+1.0);
        };
        //array_walk() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数
        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);

print($my_cart->getTotal(0.05));

© 著作权归作者所有

共有 人打赏支持
下一篇: Mysql优化学习
eatnothing
粉丝 37
博文 128
码字总数 68736
作品 0
昌平
程序员
私信 提问
PHP V5.3 中的新特性,第 2 部分: 闭包及 lambda 函数

闭包函数和 lambda 函数绝对不是新出现的概念;它们均来自函数编程领域。函数编程 是一种编程风格,它将关注点从执行命令转移到表达式计算。这些表达式是使用函数构成的,结合这些函数可以得...

未来十年
2011/12/19
0
0
小解 php闭包 lambda 函数

闭包函数和 lambda 函数绝对不是新出现的概念;它们均来自函数编程领域。函数编程 是一种编程风格,它将关注点从执行命令转移到表达式计算。这些表达式是使用函数构成的,结合这些函数可以得...

lincoln.yu
2013/07/23
0
0
PHP闭包(Closure)初探

不知不觉发现PHP已经出到了5.5版本,而自己一直在用PHP5.2,让我看起来像深山出来的小伙子一样,又土又落后。在我习惯在javascript中使用闭包之后,忽然间对PHP的闭包打起了兴趣。 于是乎在网...

豆浆Melon
2013/04/30
0
17
static变量与js闭包

0、一句话定义闭包,子函数可以定义父函数的局部变量 1、几个关键字 define 定义宏(C语言),定义常量(php) static 定义相当于位置在函数内的全局变量(生命周期与函数定义域无关),但只对...

横着走的螃蟹
2015/08/31
170
0
PHP闭包Closure研究

一、闭包概念 接触过JavaScript朋友可能对闭包有所熟悉,因为JS中我们会经常用到闭包函数,非常方便,呐,PHP5.3也开始引入了闭包的特性。要了解闭包,我们先要知道何为匿名函数,也叫闭包函...

Corwien
2016/03/18
156
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 快捷键

快捷键图标。 官方的下载地址为:https://atlassianblog.wpengine.com/wp-content/uploads/2018/01/keyboard-shortcuts-infographics.pdf...

honeymose
39分钟前
1
0
Apache限定目录解析PHP,限制user_agent,PHP相关的配置

Apache限定目录解析PHP 配置前访问upload/index.php [root@test-a ~]# curl -x192.168.77.139:80 'www.test.com/upload/index.php'This is upload diretory 配置,/usr/local/apache2.4/......

野雪球
42分钟前
1
0
java.util.Concurrent.Exchanger源码

类图 源码: package java.util.concurrent;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent......

狼王黄师傅
今天
5
0
Kubernetes里的secret最基本的用法

Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。 Secret可以以Volume或者环境变量的方式使用。 使用如下命令...

JerryWang_SAP
昨天
4
0
2018-11-20学习笔记

1. python数据类型: 给变量赋值什么样的值,变量就是什么样的类型 给变量赋值整数,变量就是整数类型 给变量赋值字符串,变量就是字符串类型 123 和“123”一样吗? 在python中 单引号 与双...

laoba
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部