2010-04-02 124 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"; 
}