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是 being 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

您必须进行比较类型的比较,而不仅仅是值 - 这意味着使用===or!==运算符,而不是==or !=

所以,你可以使用类似的东西:

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

有了这个,0就不会被认为是一回事了false


作为参考:比较运算符 (引用)

$a == $b:等于:TRUE如果 $a等于$b.
$a === $b : Identical : TRUEif$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 回答