zoukankan      html  css  js  c++  java
  • php 5.3+新特性闭包的使用

    所谓闭包,即内部函数使用了在外部定义的变量

    先来看下一个简单的例子,以便有个初步认识:

    <?php
    $msg = "Hello!";
    $fun = function () use ($msg) { //传值
         echo $msg."\n";
    };
    $msg = "world!";
    $fun();

    [fl@linux1 ~]$ php test.php
    Hello!

    <?php
    $msg = "Hello!";
    $fun = function () use (&$msg) { //传引用
         echo $msg."\n";
    };
    $msg = "world!";
    $fun();

    fl@linux1 ~]$ php test.php
    world!

    从例子中可以看出:

    a. 以传值方式传递的形参,闭包use的值在在闭包创建前就已经确定了。
    b.以引用方式传值,实际上传的是地址,$msg这个地址上的值作了改变后,闭包内输出这个值自然就改变了

    再来看一个使用闭包,生成相互独立的计数器的例子:

    <?php
    function counter() {
       $counter = 1;
       return function() use(&$counter) {return $counter++;};
    }
    
    
    $counter1 = counter();
    $counter2 = counter();
    
    echo $counter1()."\n";
    echo $counter1()."\n";
    echo $counter1()."\n";
    
    
    echo $counter2()."\n";
    echo $counter2()."\n";
    echo $counter2()."\n";

    分析:一般情况下调用counter()函数时,会创建局部变量$counter,函数返回时销毁局部变量。但在使用闭包后,闭包持有对$counter变量的引用,所以不会被回收。
            另外,由于每次调用counter()都会生成独立的counter和闭包,所以闭包之前是独立的。

     

  • 相关阅读:
    artTemplate的使用总结
    死锁的简单实现
    代理模式
    装饰器模式
    建造者模式
    工厂模式
    单例模式
    linux查看日志内容
    系统信息及系统操作
    设计模式-建造者模式
  • 原文地址:https://www.cnblogs.com/fanglin/p/2511997.html
Copyright © 2011-2022 走看看