Передача результата возврата функции в цикл foreach

#php

#php

Вопрос:

Из любопытства, являются ли два приведенных ниже варианта функционально эквивалентными?

 $array_variable = function_that_creates_an_array();
foreach($array_variable as $a){
    do_something()
}
  

против.

 foreach(function_that_creates_an_array() as $a){
    do_something()
}
  

Просто хочу убедиться, что я не вызываю функцию на каждой итерации или что-нибудь глупое в этом роде.

Спасибо!

Ответ №1:

Да, они в основном эквивалентны.

Единственное отличие в том, что первая добавит переменную в текущую область видимости (т. Е. Если ваша находится в глобальной области видимости).

Комментарии:

1. Есть ли какая-либо разница в производительности, если мы сохраним это в переменной или вызовем функцию напрямую? я имею в виду, вызывает ли php функцию на каждой итерации?

2. Нет, PHP не будет вызывать функцию в каждом цикле.

Ответ №2:

Два фрагмента будут считывать массив одинаково, без повторной оценки функции.

Тем не менее, во втором фрагменте вы не сможете получить доступ ко всему массиву во время цикла, поскольку у вас нет никакой ссылки (переменной) на него.

http://www.php.net/manual/en/control-structures.foreach.php

Ответ №3:

Просто, да, они функционально одинаковы.