案例切换语句上的PHP fugly bug - PHP版本7.0.13

时间:2018-04-17 06:03:05

标签: php

如果$ value大于0,一切正常,但如果$ value设置为0,则case switch打印出Billion: - )。

由于手册没有说明值0没有被评估,所以这对我来说是一个麻烦的错误。 http://php.net/manual/en/control-structures.switch.php

$value = 0;

    switch ($value) {
    case $value >= 1000000000:
      print 'Billion'; 
      break;
    case $value >= 1000000:
      print 'Million';
      break;
    case $value >= 1000 :
      print 'Thousand';
      break;
    default:
          print 'Ten';
      break;            
    }      

Output: Billion  :-)

3 个答案:

答案 0 :(得分:5)

这是因为switch case不接受可以计算的表达式。您应该使用if else。例如开关盒:

$value = 2;
switch($value) {
    case 2:
        print "two";
    break;
    default:
        print "default";
}

例如if else

$value = 3;
if( $value > 2 ) {
    print "greater than 2";
} elseif($value > 1) {
    print "greater than 1";
} else {
    print "default";
}

答案 1 :(得分:3)

$value = 0;

    switch (true) {
    case ($value >= 1000000000):
      print 'Billion'; 
      break;
    case ($value >= 1000000):
      print 'Million';
      break;
    case ($value >= 1000) :
      print 'Thousand';
      break;
    default:
          print 'Ten';
      break;            
    }  

请参阅此回答https://stackoverflow.com/a/7801218/6186468

答案 2 :(得分:0)

switch语句对案例中的值执行相等测试。 PHP正在评估您的比较,因此$value = 0成为案例false。 false被认为是equal to 0,因此第一种情况匹配。

$value = 0;

switch (true) {
case ($value >= 1000000000):
  print 'Billion'; 
  break;
case ($value >= 1000000):
  print 'Million';
  break;
case ($value >= 1000) :
  print 'Thousand';
  break;
default:
      print 'Ten';
  break;            
}