5

我有一个数组,它存储对单个匿名函数的多个引用:

$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。)

4

1 回答 1

5

如果您在循环内创建函数,您将创建300 个单独的匿名函数对象。PHP 不会对此进行优化,因为也许这就是您想要的。这在循环之前创建一次函数效率低得多。

这是创建两个独立对象的证明:http: //3v4l.org/f3cdE

于 2013-08-05T05:55:00.563 回答