php闭包函数简析

@date:2015-11-02 16:12:00

闭包函数(closures)也叫匿名函数,使用js的童鞋应该比较熟悉。PHP5.3开始引入了闭包的特性。

声明一个匿名函数是:

$func = function() {
     
}; //带结束符

匿名函数因为没有名字,如果要使用它,需要将其返回给一个变量。

在闭包函数里,如果要用到上文定义的一个变量,需要使用use关键字。直接使用变量是不行的。

<?php

$arr = [1,2,3];

$max = 2;

//匿名函数第一个括号里的参数是调用时赋予的。use里的参数是来自父类作用域的。
$res = array_map(function($v1) use ($max){
    if($max > 1){
        return $v1 *= 2;
    }
}, $arr);

var_dump($res);

结果:

array (size=3)
  0 => int 2
  1 => int 4
  2 => int 6

PHP闭包的特性并没有太大惊喜,其实用CLASS就可以实现类似甚至强大得多的功能,更不能和js的闭包相提并论,只能期待PHP以后对闭包支持的改进。不过匿名函数还是挺有用的,比如在使用array_map、preg_replace_callback等之类的函数可以不用在外部声明回调函数了。使用闭包可以优雅的写PHP代码。

参考:
PHP闭包(Closure)初探 - 豆浆油条Melon的个人页面 - 开源中国社区
http://my.oschina.net/melonol/blog/126694

Build by Loppo 0.6.14