PHP匿名和闭包函数

注意:匿名函数和闭包功能是PHP5.3.0以后才新增的功能

PHP闭包实现主要就是靠匿名函数实现的

将匿名函数在普通函数中当做参数传入,也可以被返回,这就实现了一个简单的闭包

通俗的说:子函数可以使用父函数中的局部变量,这种行为就叫做闭包

闭包的2个特点:

1.作为一个函数变量的一个引用,当函数返回时,其处于激活状态

2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区


连接闭包和外界变量的关键字:USE

闭包可以保存所在代码块上下文的一些变量和值。PHP在默认情况下,匿名函数不能调用所在代码的上下文变量,而需要通过使用use关键字


function demo() {

  $a = 10;

  $b = 20;

  $one = function () use (&$a) {//匿名函数定义

    $a++;

    echo $a;

   }

  return $one;//返回是一个对象类型

}

$var = demo();

$var();//输出10  闭包的特点2(没有释放资源的栈区)

$var();//输出11

$var();//输出12


规律总结:

1.闭包外层是一个函数

2.闭包内部都有函数

3.闭包会return内部函数

4.闭包返回的函数内部不能有return (因为这样就会结束了)

5.执行闭包后,闭包内部变量会存在,而闭包内部函数的内部变量不会存在


闭包应用场景:

1.保护函数内的变量,以最开始的例子为例,外层函数中的变量只有内部函数才能访问,而无法通过其他途径访问到,因此保护了外层函数中变量的安全性

2.在内存中维持一个变量,外层函数中的变量一直存在于内存中,因此每次执行,都会使用到


对闭包使用的建议:

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


你可能感兴趣的:(PHP匿名和闭包函数)