функция внутри объявления цикла? - PullRequest
3 голосов
/ 18 февраля 2011

возьмем этот пример:

foreach(explode(' ','word1 word2 word3') as $v)
 echo $v;

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

Это правда??И верно ли это даже для пользовательских функций?

Этот код лучше, чем этот, или он равен?

$genericVar = explode(' ','word1 word2 word3');
foreach($genericVar as $v)
 echo $v;

спасибо

Ответы [ 3 ]

5 голосов
/ 18 февраля 2011

Отдельный код лучше, потому что он улучшает удобочитаемость, и обслуживание кода будет проще.

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

1 голос
/ 18 февраля 2011

foreach использует копию данного массива, поэтому функция будет выполнена только один раз.

foreach(explodecount(' ','A B C') as $v)
   echo $v;

function explodecount($a,$b){
    echo '@';
    return explode($a,$b);
}

// output: @ABC
// not @A@B@C

, но это не сработает:

foreach(explode(' ','A B C') as &$v)
   echo $v;

Здесь вы должнысохранить разобранный массив в отдельной переменной.

0 голосов
/ 18 февраля 2011

При использовании foreach две части кода эквивалентны. Функция разнесения будет вызываться только один раз.

Однако, это не то, как он работает для циклов, например:

for($i = 0; $i < count($array); ++$i) {}

В этом примере функция count будет вызываться на каждой итерации.

...