Оптимизирует ли движок PHP анонимные функции внутри циклов?
У меня есть массив, который хранит несколько ссылок на одну анонимную функцию:
$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.)
1 ответ
Решение
Если вы создаете функцию внутри цикла, вы создаете 300 отдельных анонимных функциональных объектов. PHP не оптимизирует это, так как, возможно, это то, что вы хотите. Это намного менее эффективно, чем создание функции один раз перед циклом.
Вот доказательство того, что два независимых объекта были созданы: http://3v4l.org/f3cdE