编程语言
首页 > 编程语言> > PHP引擎是否优化循环中的匿名函数?

PHP引擎是否优化循环中的匿名函数?

作者:互联网

我有一个数组存储对单个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,closures,anonymous-function,php-internals,hhvm
来源: https://codeday.me/bug/20190520/1141881.html