考虑下面的代码片段PHP弱类型在while循环比较
Number: 10
Number: 9
Number: 8
Number: 7
Number: 6
Number: 5
Number: 4
Number: 3
Number: 2
Number: 1
不过,我也希望它输出Number: 0
- 但while循环评估0
为false
,所以循环永远不会达到那个点。我如何才能使循环仅在明确的false
上终止?
考虑下面的代码片段PHP弱类型在while循环比较
Number: 10
Number: 9
Number: 8
Number: 7
Number: 6
Number: 5
Number: 4
Number: 3
Number: 2
Number: 1
不过,我也希望它输出Number: 0
- 但while循环评估0
为false
,所以循环永远不会达到那个点。我如何才能使循环仅在明确的false
上终止?
while(($num = get_num()) !== false) {
额外=力量型检查为好。
<?php
$i= 11;
function get_num() {
global $i;
return (--$i >= 0) ? $i : false;
}
while(($num = get_num())!==false) {
echo "Number: $num\n";
}
?>
你必须做一个比较,其比较的类型,而不仅仅是值 - 这意味着使用的,而不是==
或!=
的===
或!==
运营商。
所以,你可以使用类似:
while(($num = get_num()) !== false) {
echo "Number: $num\n";
}
有了这个,0
将不被视为同样的事情false
。
作为参考:Comparison Operators(引用)
$a == $b
:平等:TRUE
如果$a
等于$b
。$a === $b
:相同:TRUE
如果$a
是 等于$b
,和它们是 相同类型的。
我注意到你正在使用global
。有些开发人员在没有必要时尖叫使用global
。另外,如果您在$num
声明之前编写false!==
(不要大写,只是注释),则可以省略括号。
选项1
function get_num() {
static $i=11; // effectively only declare the value once
return (--$i >= 0) ? $i : false;
}
while(false!==$num=get_num()){
echo "Number: $num\n"; // $i is NOT available outside the scope of the function.
}
选项2
function get_num($i) {
return (--$i >= 0) ? $i : false;
}
$num=11; // declare in global scope
while(false!==$num=get_num($num)){ // pass it to function as an argument
echo "Number: $num\n";
}