PHP 之闭包函数
在php语言中,闭包函数就是匿名函数
匿名函数就是没有名称的函数。匿名函数可以赋值给变量,还能像其他任何PHP对象那样传递。匿名函数仍是函数,因此可以调用,还可以传入参数。匿名函数特别适合作为函数或方法的回调。但,闭包和匿名函数其实是伪装成函数的对象(Closure类的实例)
例如:
这里就有个疑问了,前边我们说了闭包函数其实是伪装成函数的对象(不信的话,可以var_dump($a)看一下l类型),为什么可以直接$a()这样使用呢?
这个其实就是调用了对象里边的魔术方法__invoke(),关于PHP里边的魔术方法,自己也有过总结,如果对魔术方法的知识忘记了的可以看一下:
https://blog.csdn.net/self_realian/article/details/75095955
将闭包函数作为参数的情况
向闭包函数中传递参数的情况
array_map()中的闭包函数
闭包函数可以从父作用域中继承变量。这些变量可以使用use语言结构传递进去。因为PHP闭包函数不会像JavaScript的闭包那样自动封装应用的状态
在看laravel底层代码时,发现一个对象访问了私有成员,居然木有问题!!!what???上代码
为什么对象访问私有成员会没问题?其实这里是Closure::bind()方法在起作用,下边看一个栗子
其实就可以理解成$this就成了B类的对象了,然后去访问name属性。但$this是关键字,所以我们不能在代码中直接$this = new B();这样写,此处是为了方便理解
但是我们的name是私有,为什么对象可以访问呢?这里其实就是bind的第三个参数的作用。第三个参数一般为第二个参数这个对象的类名。第三个参数就是表明作用域为这个对象或类,这就使原来的私有属性name在此闭包函数中可当公有属性使用
版权声明: 本文为 InfoQ 作者【书旅】的原创文章。
原文链接:【http://xie.infoq.cn/article/b08ed9c35af65a581bb74c8d6】。文章转载请联系作者。
评论