PHP松散输入while循环比较

时间:2010-04-02 17:52:29

标签: php loops loose-typing

给出以下代码片段:

  $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 个答案:

答案 0 :(得分:2)

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

extra =强制类型检查。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您必须进行比较的比较,而不仅仅是值 - 这意味着使用===!==运算符,而不是{{1 }或==

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

!=

有了这个,while(($num = get_num()) !== false) { echo "Number: $num\n"; } 将不会被认为与0相同。


作为参考:Comparison Operators (引用)

  

false等于$a == $b if   TRUE等于$a
$b   :相同$a === $b如果TRUE是   等于$a,它们属于。{   相同类型

答案 3 :(得分:0)

我注意到您正在使用def index = Action(parse.json) { request => val loginResult = request.body.validate[LoginRequest] loginResult.fold( errors => { BadRequest(Json.obj("status" ->"KO", "message" -> errors.map { case x if x._1.path.nonEmpty ⇒ s"Invalid ${x._1.toString().stripPrefix("/")}" })) }, login => { Ok(Json.obj("status" ->"OK", "message" -> s"Login successful as ${login.user}" )) } ) } 。一些开发人员在没有必要的时候尖叫着使用global。另外,如果你在global声明之前写false!==(没什么大不了的,只是一个注释),你可以省略括号。

选项1

$num

选项2

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.
}