2010-02-19 3 views
0
foreach(func() as $item)... 

Вышеуказанное позвонит только func(), но почему? Что происходит точно?Как выполняется foreach в PHP?

+0

У вас есть примеры кода для показать? С реальным кодом мы можем помочь вам больше и дать лучший ответ. –

ответ

2

foreach не является структурой управления с условием, которое проверено до или после каждой итерации, например while, for или do … while. Вместо этого он принимает массив, делает его копию внутри и повторяет это.

Массив может либо передаваться через переменную (наиболее часто используемый вариант):

foreach ($arr as $val) { /* … */ } 

Или с другим выражением, которое возвращает массив при оценке:

foreach (array('foo','bar') as $val) { /* … */ } 

function f() { return array('foo','bar'); } 
foreach (f() as $val) { /* … */ } 
+0

Это не структура, что это такое? – user198729

+0

http://www.php.net/foreach –

+0

@ user198729: Я не сказал, что это не структура управления. Я просто сказал, что это не структура управления с условием, которое проверено на каждой итерации. – Gumbo

1

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

7

foreach принимает массив. Вы по сути вызываете func() один раз самостоятельно и передаете результирующий массив в конструкцию foreach, которая может зацикливаться на ней.

+0

Можете ли вы это доказать? – user198729

+2

Я думаю, что это очевидно, когда вы оцениваете цикл foreach –

+1

, чтобы доказать, что он добавляет эхо или журнал к функции, которую вы вызываете в 'func()' – thetaiko