PHP CASE语句不使用ZERO值

pba*_*ney 7 php switch-statement

我不明白这里发生了什么.从逻辑上讲,这对我没有任何意义.

<?php
$level = 0;

switch ($level) {

  case $level > 80: $answer = 'high'; break;
  case $level > 60: $answer = 'moderate-to-high'; break;
  case $level > 40: $answer = 'moderate'; break;
  case $level > 20: $answer = 'low-to-moderate'; break;
  default: $answer = 'low'; break;
}   
echo $answer;
?>
Run Code Online (Sandbox Code Playgroud)

当$ level == 0时,它返回"high".这对我没有任何意义.有人能解释一下这里发生了什么吗?

Phi*_*oss 27

更改switch ($level)switch (true),这会工作.

switch语句对案例中的值执行相等测试.PHP正在评估你的>比较,所以case $level > 80变成了case false.false被认为是等于0,所以第一种情况匹配.

  • 我不确定这是否是推荐使用switch语句的方法,我不会说它读得很好. (4认同)
  • 这对我来说非常有意义.我对开关的工作方式有一个根本的误解.谢谢你的教育! (2认同)

Jam*_*nen 5

case需要的数量只是值,而不是布尔表达式.我猜,PHP被评估case $level > 80case ($level > 80)这是越来越case 0(即假的,因为$level确实不小于80)等你第一种情况相匹配.