【问题标题】:php Switch statement and 0php switch 语句和 0
【发布时间】:2013-04-25 09:41:57
【问题描述】:

嗨,我今天看到这样的代码

$i=0;
switch($i){
    case 'TEST': print "Test";break;
    case 0: print "0";break;
} 

正常输出似乎是0,但它打印Test。然后我尝试理解它并得到了解决方案here。也就是说,当将数字与字符串进行比较时,字符串将转换为数字并以数字方式进行比较。好的,然后可以得到输出Test

但是如果我设置和它一样呢

$i=0;
switch($i){
    case ($a === 'Test'): print "Text";break;
    case ($a === 0): print "0";break;
}

这也给出了结果Test 所以我在这里很困惑。如果我使用== 而不是===,那么它会显示为空白。所以请清除我。

【问题讨论】:

  • 使用 switch(true) 作为 $a==='Test' 等同于真或假
  • 您将在 switch 语句中对案例进行松散的类型比较 - 0 !== 'Test'0 == 'Test' - 所以最好避免混合不同的数据类型
  • 第一个例子 0 与 'TEST' 相比 - 'TEST' 是一个等于 0 的字符串,导致匹配 php.net/manual/en/language.operators.comparison.php === 也进行类型匹配
  • 好的,伙计们。我必须使用switch(true) 进行比较。感谢Waygood 的回答。
  • $a==='Test' 等同于假。 Switch(0) 与给我第一个 FALSE 的情况相同,因为 0 为 false。

标签: php switch-statement zero


【解决方案1】:

您必须将 $i 设为数字吗? 让它也成为字符串...

$i="0";
switch($i){
    case 'Test': print "Text";break;
    case '0': print "0";break;
}

打印 0...

【讨论】:

    【解决方案2】:

    Switch 将0 视为false,所以你可以在这里:

    $i=0;
    switch(true){
        case $i === 'TEST': print "Test";
            break;
        case $i === 0 : print "0";
            break;
    } 
    

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多