【发布时间】:2013-08-05 18:13:05
【问题描述】:
我有一个数组,它存储对单个 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 引擎。)
【问题讨论】:
-
你分析了吗? 300 个对象不算什么。您甚至可能无法用那几个物体测量差异。除非您开始创建数百万个对象,否则差异可以忽略不计。
-
@Gordon,我们很难找到不引用 c2.com/cgi/wiki?PrematureOptimization 的编码器。这就是为什么我们有stackoverflow.com/questions/239136/… 来回应c2.com/cgi/wiki?PrematureOptimization。
标签: php closures anonymous-function hhvm php-internals