2012-01-03 99 views
-2

PHP manual regarding for loops看來下面的內容不正確。C for循環與PHP for循環不同嗎?

它們的行爲與C的對應行爲類似。

這是我對for循環的理解。
在C
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循環的行爲會有所不同,手冊是不正確的,對嗎?

+7

我認爲你對C for循環的理解是錯誤的。 AFAIK這兩種語言都像你最後的代碼示例一樣。 – DaveRandom 2012-01-03 16:56:22

+1

¿if(i = foo)? – Sirs 2012-01-03 16:56:59

+0

令人驚訝的是,一段錯誤觀念能夠持續多久。我一直認爲init表達式是一個條件,人們總是把一個任務分配到那裏來評估爲真。 – htoip 2012-01-03 17:20:08

回答

13

他們是完全一樣的,但你對C的for循環的理解是錯誤的。它們和PHP中的一樣。

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

幾乎是像

x; 

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

雖然在C forwhile例子是不完全一樣的,因爲範圍和事物。

+0

'+ 1' from^^^^ – Neal 2012-01-03 16:55:44

+2

lol @「他們完全一樣......」「這不完全一樣......「 – Wiseguy 2012-01-03 16:56:53

+0

@Wiseguy呵呵我沒注意到:-P – Neal 2012-01-03 16:58:32

8

真:

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

的下循環基本上是:

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

這已經有一段時間,因爲我學會或花時間與C,但我m很確定C for循環中的第一個語句是將變量設置爲值的表達式,就像它在C中一樣。

0

在C i=foo確實是一個條件,它相當於(i=foo)!=0,因爲0是C中的false而不是-0true

問題是C for循環無法按照您認爲的方式工作,正如您可以使用i=0初始化for循環的事實所證明的那樣。