0

次のコードスニペットがあるとします。

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

結果は次のようになります。

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ですか?

4

4 に答える 4

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

extra=タイプチェックも強制します。

于 2010-04-02T17:54:42.633 に答える
0
<?php
  $i= 11;
  function get_num() {
    global $i;
    return (--$i >= 0) ? $i : false;
  }
  while(($num = get_num())!==false) {
    echo "Number: $num\n";
  }
?>
于 2010-04-02T17:53:52.173 に答える
0

値だけでなく、タイプを比較する比較を行う必要があります。つまり、またはの代わりに===または!==演算子を使用することを意味します。==!=

したがって、次のようなものを使用できます:

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

これにより、0と同じものとは見なされませんfalse


参考として:比較演算子 (引用符)

$a == $b等しい:等しいTRUE場合 。 :同一:がに等しい場合、それらは同じタイプです。$a$b
$a === $bTRUE$a$b

于 2010-04-02T17:54:07.453 に答える
0

を使用していることに気づきましたglobal。一部の開発者は、必要のないときに使用することについて悲鳴を上げglobalます。false!==また、宣言の前に書く場合は、括弧を省略できます$num(大したことではなく、メモだけです)。

オプション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";
}
于 2018-01-19T16:51:31.240 に答える