2012-09-18 83 views
2

我一直在尋找通過在工作中的一些代碼,並發現了一些我從來沒遇到過:我們調用包含這一切的時候功能爲什麼for(;;)有效?

for (; ;) 
{ 
    // Some code here 
    break; 
} 

,我最近纔得到了在那裏,看看它是如何工作的。爲什麼這個工作,並記錄在某個地方?

它好像一個while循環會一直在這種情況下更合適......

+0

很有關係:HTTP://計算器。 com/questions/4592166/what-is-an-empty-loop – nico

+0

它與do {}相似,while(true) – Zaffy

回答

7

它本質上是一樣的while(true)。它沒有任何初始化,不會在迭代之間改變任何東西,並且在沒有任何東西使其錯誤的情況下假定爲真。

+0

所以問題是這個行爲是否特定於for循環或者是否有任何空語句被認爲是真的... – mensi

+0

哦,PHP沒有任何東西,所以你認爲無限循環比沒有代碼執行更合乎要求。有時PHP可能是一個有點棘手的混蛋。 – thatidiotguy

+0

'if()'在意外的')'上給出了一個分析錯誤。只有'for'循環實際上在括號中有三個語句,每個語句由';'分隔。 –

1

第一個空白語句在開始時執行。

第二坯件表達式(其確定是否退出該循環或不)評估爲TRUE隱式:

http://php.net/manual/en/control-structures.for.php

第三空白語句每次迭代之後執行。

所以任何踢出循環的條件都需要在循環中。

3

這是一個無限循環。

通常你會碰到這樣的:

for ($i=0; $i<10; $i=$i+1) 

但你可以省略任何部件。

這些都是有效的:

for ($i=0; ; $i=$i+1) 
for (; $i<10; $i=$i+1) 
for (; $i<10;) 

但是,如果你忽略第二個部分,將有退出循環沒有條件。如果你不知道你想要運行循環的次數,可以使用它。您可以使用break指令退出循環在這種情況下

for (;;) 
    { 
    // some code 
    if (some condition) 
     break; 
    } 

需要注意的是,如果你不把break頁面只會被卡住並運行無限期