Php5.3的lambda函数以及closure(闭包)
2014-05-08 16:40
309 查看
从php5.3以后,php也可以使用lambda function(可能你会觉得是匿名函数,的确是但不仅仅是)来写类似javascript风格的代码:
当一个函数的参数是另一个函数(callback)的时候,就会显得相当有用:
闭包其实可以理解为返回另外一个函数的函数(当然不是这么简单的,刚学闭包的时候可以暂时这么理解)
$myFunc = function() { echo 'Hello World';}; $myFunc();
当一个函数的参数是另一个函数(callback)的时候,就会显得相当有用:
$input = array(1, 2, 3, 4, 5); $output = array_filter($input, function ($v) { return $v > 2; });
这样就不用单独再把函数定义写在前面 有的人可能会说使用create_function函数也可以,不过所有php ide都不支持字符串的内的代码高亮功能,而create_function函数的函数实现却是用的字符串方式。另外还有一个性能问题。 那什么时候使用闭包呢? 还是继续以上面的例子说明,如果我有好多地方都会按数组的大小过滤函数,但过滤的值并不是确定的,比如上面的例子是值大于2的就保留,那如果有的是值大于3的就保留,有的只要是正数就保留,这代码怎么写最好? 这个时候,就需要闭包出马了:
$max_comparator = function ($max){ return function ($v) use ($max) { return $v > $max; };}; $input = array(1, 2, 3, 4, 5); $output = array_filter($input, $max_comparator(2));
闭包其实可以理解为返回另外一个函数的函数(当然不是这么简单的,刚学闭包的时候可以暂时这么理解)
还有一个使用lambda函数而不使用create_function的一个理由是效率问题,国外找到一个测试结果:
1 - with a "standard" function
2 - with a lambda function
3 - by using create_function()
For 50, 000 iterations on my laptop, here are the time spent for each implementation:
1 - 240 ms
2 - 200 ms
3 -1200 ms
So, lambda functions are as fast as "standard" PHP functions.
2 - with a lambda function
3 - by using create_function()
For 50, 000 iterations on my laptop, here are the time spent for each implementation:
1 - 240 ms
2 - 200 ms
3 -1200 ms
So, lambda functions are as fast as "standard" PHP functions.
相关文章推荐
- php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
- 小解 php闭包 lambda 函数
- php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
- php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
- PHP - 闭包Closure和lambda function
- 用js进行url编码后用php反解以及用php实现js的escape功能函数总结
- php5.3/php5.4与之前的版本差异以及(php5.2x/php5.4x性能对比)
- PHP 正则preg_match 与 preg_match_all 函数以及匹配中文
- PHP闭包(Closure)初探
- php5.3 fastcgi方式 安装以及和nginx整合
- php的闭包(Closure)匿名函数详解
- PHP闭包与函数回调
- PHP的php_strip_whitespace函数描述,以及手册中写的代码压缩函数-可看看函数是怎么实现的
- php的POSIX 函数以及进程测试的深入分析
- PHP闭包(Closure)初探_豆浆油条
- php的闭包(Closure)匿名函数用法详解
- PHP5.3中关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
- php5.3 废弃函数小结
- php计算时间差的函数以及方法
- PHP5.3与5.5废弃与过期函数整理汇总