PHP中的闭包和匿名函数总结

PHP中的闭包和匿名函数总结

概述

很早就在JS中经常碰到闭包函数,不过对闭包和匿名函数一直理解不透,今天好好整理下,说到了这里还是挺羞愧的。PHP中的闭包和匿名函数都是在PHP5.3中开始引入的。

匿名函数其实就是没有名称的函数,匿名函数可以赋值给变量,还能像其他任何PHP函数对象那样传递。不过匿名函数仍然是函数,因此可以调用,还可以传入参数,适合作为函数或方法的回调。

至于闭包,从某种角度上来说,匿名函数就是为了做闭包用的,所谓闭包,通俗来说,就是子函数拥有父函数的中的局部变量,这种行为就叫闭包函数。

创建一个闭包

$func = function ($name){
    echo $name;
};
$func('你好,王二小');
  • 匿名函数其实就是调用了魔术方法__invoke,关于该方法下面的例子可以足够解释,其实就是当把对象当函数来调用的时候自动调用该魔术方法
class Json{
    public function __invoke()
    {
        return new static();
    }
    public static function getName($name){
        echo $name;
    }
}
$json = new Json();
$json()::getname('王二小');

如何拥有父函数中的局部变量

通常需要使用父函数的变量,需要通过 use关键字,将父函数中的变量带入到子函数中去。

class Json{

    public static function test1($name){

        $func = function () use ($name){
            echo $name;
        };

        $func();
    }
}

Json::test1('王二小');