【问题标题】:PHP switch syntax [duplicate]PHP切换语法[重复]
【发布时间】:2018-08-09 16:03:37
【问题描述】:

我是 PHP 的菜鸟,并试图弄清楚 SWITCH 语法。 我知道如何做这样的案例陈述:

$numbr = 2;
switch ($numbr) {
  case 2:
    echo "numbr is equal to 2";
    break;

   case 1:
     echo "numbr is 1";
     break;
}

但如果我改用它(检查大于 1 的数字)它会中断。我做错了什么?

$numbr = 2;
switch ($numbr) {
  case >1:
    echo "numbr is greater than 1";
    break;

  case 1:
  echo "numbr is 1";
    break;
}

【问题讨论】:

  • 我想case >1: 甚至是一个语法错误。
  • 你不能用开关做到这一点。每个“案例”都是离散的,而不是像“> 1”那样相对。看起来你想要一个 if/else 而不是这里的开关。
  • 这行得通 - case $numbr >1:
  • 技术上case 可以有一个像case $numbr > 1 这样的布尔条件,但这非常丑陋和令人困惑。这将更好地表达为if/else if/else
  • case $numbr >1: 有效,但仅适用于这种特殊情况。

标签: php switch-statement case


【解决方案1】:

Switch 语句不适用于这些情况,而应使用if/else

if($numbr > 1) {
    echo "numbr is greater than 1";
} else if($numbr == 1) {
    echo "numbr is 1";
}

开关在将一个值与许多其他值进行比较时最有用,而不是用于将一个值与数学表达式或逻辑进行比较。

如果可能,最好使用 switch 语句而不是 if 语句,因为 switch 语句只评估一次,而 if 语句会针对每个 if() 进行评估。

【讨论】:

  • 谢谢。似乎这个开关并不意味着太多的“逻辑”,而 if/else 做了更多的测试?
  • @ScottPlude 没错!您还可以阅读我在答案中添加的链接。请务必选中对您最有帮助的答案旁边的复选标记,因为这将为您和回答者赢得一点声誉,并向未来的访问者展示您选择的最有帮助的答案。
  • 谢谢!非常感谢您的宝贵时间,我保证在发布我的问题之前我花了一个多小时试图弄清楚。
  • @ScottPlude 没问题!有时人们缺乏正确的搜索词来找到他们问题的答案,只需要朝着正确的方向一点点推动。我很高兴能帮您解决这个问题。
【解决方案2】:

你不能把它当作一个案例,必须有一个价值。

一个好的解决方案可能是这个,但仅适用于正值:

$numbr = 2;
switch ($numbr) {
  case 0:
    break;

  case 1:
  echo "numbr is 1";
    break;

  default:
    echo "numbr is greater than 1";
    break;
}

如果你也想处理负值,你需要像其他人所说的那样使用 if/else

【讨论】:

  • 注意:如果你给这个开关提供一个小于0的数字,它也会回显“数字大于1”。 (为此使用开关确实不是一个好主意)
  • 你说得对,我只是想给他一个解决方案来支持他的选择,但如果/否则它显然更好。
  • 编辑了一下,只是为了表明你说的话:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多