开发者社区> 问答> 正文

请教各位有关php 匿名函数的效率问题

最近在看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;};
}

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

展开
收起
落地花开啦 2016-06-12 17:27:26 2129 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    事实胜于雄辩,引用一下曾经有人做过的测试:
    screenshot
    看得出来lambda跟直接写function的速度相当,比用create_function快很多

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

    2019-07-17 19:34:43
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载