最近在看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;};
}
哪一种写法效率更高呢?
或者是,这样的写法和把匿名函数定义放在循环体外定义,循环内调用相比有没有区别呢?
事实胜于雄辩,引用一下曾经有人做过的测试:
看得出来lambda跟直接写function的速度相当,比用create_function快很多
另外从内核代码里看create_function方法调用了zend_execute_API.c里的zend_eval_stringl方法相当于将函数体字符串参数在执行时再次解析以及编译一遍,在编译前还有准备工作要做,想想eval有多慢你就知道,同样的道理
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。