Отличаются ли C для циклов от PHP для циклов? - PullRequest
0 голосов
/ 03 января 2012

Кажется, что следующее из руководства PHP относительно for циклов неверно.

Они ведут себя как их коллеги С.

Это мое понимание for петель.
В С
for (i = foo; i < 10; i++) { /* body */ }
эквивалентно

if ( i = foo )  
{   while (i < 10)  
    {    /* body */
         i++;
    }
}

В PHP сравнимый цикл
for ($i = $foo; $i < 10; $i++) { /* body */ }
становится

$i = $foo;
while ($i < 10)
{   /* body */
    $i++;
}

Разница в том, что в PHP $i = $foo это не условие, а удобное место для утверждения. Предположим, мы изменили сингл = на ==. Различие становится значительным. Это правильно? Если это так, то циклы PHP и C ведут себя по-разному, а руководство неверно, верно?

Ответы [ 4 ]

13 голосов
/ 03 января 2012

Они точно такие же, но ваше понимание петель C for неверно.Они такие же, как в PHP.

 for (x; y; z) { /* body */ }

почти так же, как

 x;

 while (y) {
     /* body */
     z;
 }

Хотя примеры for и while в C не совсем совпадают из-за областей действия ивещи.

8 голосов
/ 03 января 2012

Это равно , а не true:

if ( i = foo )  //what??
{   while (i < 10)  
    {    /* body */
         i++;
    }
}

C для цикла в основном:

int i = foo; 
while (i < 10)  
 {    /* body */
      i++;
 }
1 голос
/ 03 января 2012

Прошло много времени с тех пор, как я выучил или провел время с C, но я почти уверен, что первое утверждение в цикле for for - это выражение, устанавливающее переменную в значение, как в C.

0 голосов
/ 03 января 2012

В C i=foo действительно является условием, оно эквивалентно (i=foo)!=0, поскольку 0 равно false в C, а не - 0 равно true.

Проблема в том, что циклы C for работают не так, как вы думаете, о чем свидетельствует тот факт, что вы можете инициализировать цикл for с помощью i=0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...