#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:
Два фрагмента будут считывать массив одинаково, без повторной оценки функции.
Тем не менее, во втором фрагменте вы не сможете получить доступ ко всему массиву во время цикла, поскольку у вас нет никакой ссылки (переменной) на него.
Ответ №3:
Просто, да, они функционально одинаковы.