2010-04-02 173 views
0

考虑下面的代码片段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循环评估0false,所以循环永远不会达到那个点。我如何才能使循环仅在明确的false上终止?

回答

2
while(($num = get_num()) !== false) { 

额外=力量型检查为好。

0
<?php 
    $i= 11; 
    function get_num() { 
    global $i; 
    return (--$i >= 0) ? $i : false; 
    } 
    while(($num = get_num())!==false) { 
    echo "Number: $num\n"; 
    } 
?> 
0

你必须做一个比较,其比较的类型,而不仅仅是值 - 这意味着使用的,而不是==!====!==运营商。

所以,你可以使用类似:

while(($num = get_num()) !== false) { 
    echo "Number: $num\n"; 
} 

有了这个,0将不被视为同样的事情false


作为参考:Comparison Operators(引用)

$a == $b平等TRUE如果 $a等于$b
$a === $b相同TRUE如果$a是 等于$b和它们是 相同类型的。

0

我注意到你正在使用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"; 
}