美文网首页
PHP的匿名函数和闭包

PHP的匿名函数和闭包

作者: Jeffrey陈 | 来源:发表于2017-06-25 23:22 被阅读0次

    匿名函数

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

    匿名函数的实现

    匿名函数是目前是通过Closure类来实现,匿名函数会产生这个类的对象。自PHP 5.4起,这个类带有一些方法,允许在匿名函数创建后对其进行更多的控制。

    注意:PHP手册特别说明__invoke()这个魔术方法与匿名函数的实现过程无关。

    Closure类如下:

    Closure {
        /* 方法 */
        __construct ( void )
        public static Closure bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] )
        public Closure bindTo ( object $newthis [, mixed $newscope = 'static' ] )
        }
    
    Closure::__construct — 用于禁止实例化的构造函数
    Closure::bind — 复制一个闭包,绑定指定的$this对象和类作用域。
    Closure::bindTo — 复制当前闭包对象,绑定指定的$this对象和类作用域。
    

    匿名函数例子:

    $func = function($str){
        echo $str;
    };
    $func('hello');
    
    

    闭包

    闭包是指在创建时封装周围状态(如变量)的函数,即使闭包所在的环境的不存在了,闭包中封装的状态依然存在。

    闭包的实现

    将匿名函数放在一个普通函数中(也可以将匿名函数返回),就构成了一个闭包。

    function closureFunc(){
        $func = function(){
            echo 'hello';
        }
        $func();
    }
    closureFunc();//输出:hello
    
    

    闭包的使用

    在匿名函数中引入局部变量时需要用到use关键字。这是因为PHP中的变量范围只在它的生效范围中。在匿名函数里并没有对变量进行定义,所以需要使用use关键字

    
    function closureFunc1(){
        $num = 1;
        $func = function() use($num){
            echo $num;
        };
        $func();
    }
    closureFunc2();//输出
    
    

    闭包返回匿名函数并传参

    function closureFunc2(){
        $num = 1;
        $func = function($str) use($num){
            echo $num;
            echo $str;
        };
        return $func;
    }
    $func = $closureFunc2();
    $func('hello');//输出 1 hello
    

    相关文章

      网友评论

          本文标题:PHP的匿名函数和闭包

          本文链接:https://www.haomeiwen.com/subject/uufdcxtx.html