<?phpfunctioncallback($callback){$callback();}$obj=(object)"php aaa";$callback=function()use($obj){print"This is a closure use object, msg is: {$obj->scalar}. <br />";};$obj->scalar="php bbb";//$obj = (object) "php bbb"; callback($callback);
Changelog Version Description 5.4.0 $this can be used in anonymous functions. 5.3.0 Anonymous functions become available.
这真是件大快人心的大好事!测试demo如下:
class A { public $t; public function __construct($t="hello,world"){ $this->t=$t; } function test(){ call_user_func(function(){ echo $this->t; }); } } $a=new A(); $a->test();
所以,对于高版本的PHP,就不用搞个$that了。 刚刚去搜了下相关问题,stackoverflow上这组问答非常值得参考,今天才发现,罪过罪过: php - Using $this in anonymous function 又去翻了下文档,有了这个特性之后,类似JavaScript里apply之类的this劫持也可以实现了,这真是大快人心的事情。
class Contrller{ //调用具体的action, public function __act($action){ call_user_func( array($this,$action) ); } } class HelloContrller extends Controller{ public function index(){ } public function hello(){ } public function dance(){ } }
<?php //装饰器 $dec=function($func) { $wrap=function ()use ($func) { echo "before calling you do sth
"; $func(); echo "after calling you can do sth too
"; }; return $wrap; }; //执行某功能的函数 $hello=function (){ echo "hello
"; }; //装饰 $hello=$dec($hello); //在其他地方调用经过装饰的原函数 $hello(); /*output: before calling you do sth hello after calling you can do sth too */
付费偷看金额在0.1-10元之间
1、基础:一句话实现定义一个函数并立即调用
大家在JavaScript里经常这么搞,因为变量污染是个不可容忍的事儿。但是PHP里如何实现这样的功能?一个可行方法是:
2、上下文变量
在1的基础上,来个有意思的:用一个匿名函数当做匿名空间,同时调用外部上下文变量:
3、 use和$this
在2的基础之上,更强大的用法(use当前类对象的引用)。
官方文档的参考链接PHP: Anonymous functions
这真是件大快人心的大好事!测试demo如下:
刚刚去搜了下相关问题,stackoverflow上这组问答非常值得参考,今天才发现,罪过罪过:
php - Using $this in anonymous function
又去翻了下文档,有了这个特性之后,类似JavaScript里apply之类的this劫持也可以实现了,这真是大快人心的事情。
4、碉堡了的特性:调用那个可调用的东西
调用一切可调用的东西,不只是你自定义的函数。
简单例子:把这个用于实现一个通用控制器。
再写一个路由(亲测不超过40行即可实现)基本上一个MVC框架的雏形就出来了。
5、利用闭包实现和Python类似的装饰器函数
What are some cool PHP tricks?
交换俩个值:
list($b, $a) = array($a, $b);
$a = array($b, $b = $a)[0];
补充一个:在 PHP 源代码中可以直接输入网址,不需要注释(黑魔法):
一周热门 更多>