给出以下代码片段:
$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
上终止?
答案 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
ifTRUE
等于$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.
}