【发布时间】:2014-04-30 05:26:58
【问题描述】:
我的函数中有几个正在工作的 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);
...然后我得到了我想要的结果,但这仅仅是因为我正在纠正当 $excluded 首次定义为 true 时 while 循环中断的失败。我在这里做错了什么?
更新 我刚刚重读了手册,显然我错过了这一部分:
每次循环开始时都会检查表达式的值,因此即使在执行嵌套语句期间该值发生变化,执行也不会停止,直到迭代结束
这就是迭代恢复为 false 的原因。毕竟我确实需要手动条件中断。
【问题讨论】:
-
你确定它会进入第二个循环吗?您的
break;语句没有围绕它的条件,无论您的$excluded是真还是假,它都会执行。 -
缺少大括号.....
-
break 语句位于循环的末尾,用于覆盖那些永远不会返回 true 的迭代,因此循环不会卡住。但我向你保证,有些迭代在第一个语句中返回 true,但表现得不像它们是 true,因此我知道它会继续到第二个语句。最后的休息不是问题。
-
不,缺少大括号不是问题。
标签: php while-loop