考慮下面的代碼片段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";
}