我有幾個工作while循環在我的功能,但這一個我只是不能工作,因爲它應該。我認爲while($variable == false)
會在$variable = true;
發生時立即跳出循環。這是一個純粹的骨骼版本,循環中只有兩條語句。雖然循環沒有打破條件時
$excluded = false;
while($excluded == false):
$excluded = in_array(strtolower($extension), $GLOBALS['codexts']) ? true : false;
$excluded = $file != "." && $file != ".." ? false : true;
break;
endwhile;
在循環中,第一個定義確實產生false
時,它的假設,但循環不破。它繼續到第二個,它返回true。如果我改變了第二個這樣:
$excluded = $excluded ? $excluded : ($file != "." && $file != ".." ? false : true);
...然後我得到我想要的結果,但這只是因爲我糾正while循環未能打破時$excluded
首先被定義爲true
。我在這裏做錯了什麼?
UPDATE 我剛重讀手冊,顯然我錯過這部分:
表達式的值在循環的開始,每次檢查,因此,即使該值發生變化時執行嵌套語句,直到迭代結束纔會停止執行。
這就是爲什麼迭代恢復爲假的原因。畢竟,我確實需要手動進行有條件的休息。
你確定它進入到第二循環?你的'break;'語句沒有圍繞它的條件,無論你的'$ excluded'是真還是假,它都會被執行。 –
丟失大括號..... –
break語句位於循環結尾,以覆蓋那些永不會返回true的迭代,因此循環不會卡住。但我向你保證,有些迭代在第一個語句中返回true,但不是表現得像他們是真實的,因此這就是我知道它正在發生的第二條語句。最後的休息不是問題。 –