我有一个数组,它存储对单个 anonymous function 的多个引用:
$fns = array();
//some code
$fn = function(){
echo 'this is closure 12345... < 67890';
// etc etc..
};
for($x=12345; $x<67890; ++$x){
$fns[$x] = $fn;
}
可以看出,我们只创建了一个匿名函数。
如果我们将函数声明放在循环内会怎么样? :
$fns = array();
//some code
for($x=12345; $x<67890; ++$x){
$fns[$x] = function(){
echo 'this is closure 12345... < 67890';
// etc etc..
};
}
引擎是否足够智能,可以识别出只需要创建一个对象?
上面的代码是只创建一个对象还是每次迭代创建一个对象?
(问题同时针对 HHVM 和 Zend Engine。)
最佳答案
如果您在循环内创建函数,您将创建 300 个独立的匿名函数对象。 PHP 不会对此进行优化,因为也许这就是您想要的。这比在循环之前创建一次函数效率要低很多。
这是创建了两个独立对象的证明:http://3v4l.org/f3cdE
关于php - PHP引擎是否优化循环内的匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18051368/