美文网首页
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

相关文章

  • Modern PHP : 闭包和匿名函数

    Modern PHP : 闭包和匿名函数

  • php中的匿名函数和闭包

    php中的匿名函数和闭包(closure) 一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函...

  • PHP新特性之闭包、匿名函数

    闭包 闭包是什么? 1).闭包和匿名函数在PHP5.3中被引入。2).闭包是指在创建时封装函数周围状态的函数,即使...

  • php闭包函数(Closure)

    匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个...

  • PHP闭包(Closure)初探

    匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个...

  • [正儿八经PHP]PHP闭包(Closure)初探

    匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个...

  • PHP 闭包

    闭包和匿名函数在php5.3中引入,闭包是指的创建时封装周围状态的函数,即便闭包所在的环境不存在了,闭包中封装的状...

  • 计算机概念100

    php闭包: 匿名函数 a){}程序闭包: 就是函数内部的函数流式文件: 二进制文件(不受物理符号(如回车符)...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • Python中的闭包

    php对闭包的定义是匿名函数,我之前对python闭包的理解是:外部函数以内部函数作为返回值,称之为闭包!!!(错...

网友评论

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

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