为了账号安全,请及时绑定邮箱和手机立即绑定

php 匿名函数的效率问题

php 匿名函数的效率问题

小唯快跑啊 2019-04-23 15:18:18
最近在看php的匿名函数,有这么几种用法$foo=create_function('$a','return$a;');和$foo=function($a){return$a;};这两种做法在分别是在什么时候创建函数体的呢?如果在一个循环中,如下:for($i=0;$i
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

事实胜于雄辩,引用一下曾经有人做过的测试:1-witha"standard"function2-withalambdafunction3-byusingcreate_function()For50,000iterationsonmylaptop,herearethetimespentforeachimplementation:1-240ms2-200ms3-1200ms看得出来lambda跟直接写function的速度相当,比用create_function快很多另外从内核代码里看create_function方法调用了zend_execute_API.c里的zend_eval_stringl方法相当于将函数体字符串参数在执行时再次解析以及编译一遍,在编译前还有准备工作要做,想想eval有多慢你就知道,同样的道理
                            
查看完整回答
反对 回复 2019-04-23
?
青春有我

TA贡献1784条经验 获得超8个赞

用create_function的话,实际上是每次调用这个函数,由它来创建一个新的函数($foo每次指向不同的函数)。对于匿名函数,php实际上会创建一个全局的匿名函数,$foo每次只是引用它而已。用vld看php的opcode可以发现:ZEND_DECLARE_LAMBDA_FUNCTION'%00%7Bclosure%7D%2Ftmp%2Fphp%2F1.php0x7fad37b0b035'比较起来,理论上匿名函数是效率要高的。另外,写在外面的话,也许效率能更高一点,但是对于php来说,真不差这一点。
                            
查看完整回答
反对 回复 2019-04-23
  • 2 回答
  • 0 关注
  • 306 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信