您好,匿名用户
随意问技术百科期待您的加入

php 匿名函数的效率问题

0 投票

最近在看php的匿名函数,有这么几种用法

$foo = create_function ('$a', 'return $a;');

$foo = function ($a) {return $a;};

这两种做法在分别是在什么时候创建函数体的呢?
如果在一个循环中,如下:

for ($i=0; $i<10; $i++) {
    $foo = create_function ('$a', 'return $a;');
}

for ($i=0; $i<10; $i++) {
    $foo = function ($a) {return $a;};
}

哪一种写法效率更高呢?
或者是,这样的写法和把匿名函数定义放在循环体外定义,循环内调用相比有没有区别呢?

用户头像 提问 2012年 12月1日 @ Diana 上等兵 (326 威望)
分享到:

1个回答

0 投票

事实胜于雄辩,引用一下曾经有人做过的测试:

1 - with a "standard" function
2 - with a lambda function
3 - by using create_function()
For 50, 000 iterations on my laptop, here are the time spent for each implementation:
1 - 240 ms
2 - 200 ms
3 -1200 ms

看得出来lambda跟直接写function的速度相当,比用create_function快很多

另外从内核代码里看create_function方法调用了zend_execute_API.c里的zend_eval_stringl方法相当于将函数体字符串参数在执行时再次解析以及编译一遍,在编译前还有准备工作要做,想想eval有多慢你就知道,同样的道理

用户头像 回复 2012年 12月1日 @ Aquarius 上等兵 (283 威望)
提一个问题:

相关问题

0 投票
1 回复 36 阅读
用户头像 提问 2012年 12月1日 @ Graves 上等兵 (254 威望)
0 投票
1 回复 204 阅读
用户头像 提问 2012年 12月1日 @ Scorpio 上等兵 (220 威望)
0 投票
1 回复 31 阅读
用户头像 提问 2013年 11月27日 @ Garen 上等兵 (269 威望)
+1 投票
1 回复 66 阅读
用户头像 提问 2013年 1月26日 @ Kyrie 上等兵 (240 威望)
0 投票
1 回复 41 阅读
用户头像 提问 2012年 12月1日 @ Berserker 上等兵 (157 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...