繁体   English   中英

if 语句与 switch 语句

[英]if statement vs. switch statement

我知道这个话题在此之前已经讨论过,但是没有提到这个案例,我仍然不肯定哪个更好。

如果您有一个类似于以下内容的 if 语句:

if (($var=='A') || ($var=='B') || ($var=='C') || ($var=='D')...) { echo "hello world"; }

在这种情况下,使用 switch 语句会更好吗?

谢谢!

根据我对这个问题的理解,我认为最好使用 in_array(); 当你想检查这个或那个是否正确时,做同样的事情,你可以创建一个数组,然后检查它是否在那里并执行如下操作:

$array=array("A","B","C","D");
if(in_array($var,$array)){
   echo 'hello world';
}

如果您想根据变量做不同的事情,请使用 switch,例如:

$lang='fr';
switch($lang){
   case 'fr': echo "français"; break;
   case 'sp': echo "spanish"; break;
   default: echo "english"; break;
}

最后使用 if 来检查具体的比较,比方说:

if($lang=='fr'){
  echo "bonjour le monde";
}else{
  echo "hello world";
}

您也可以在这种情况下使用switch ,如果存在相同的值,则不要为具有相同值的cases添加中断,如下所示:

switch ($var) {
    case 'A':
    case 'B':
    case 'C':
    ........ //Any other cases
        echo "hello world";
        break;
    default:
        echo "something else";
        break;
}

我真的不认为你需要考虑这种事情的性能,但如果你想要一个更面向性能的响应,看看这篇文章: Java 中 if/else 与 switch 语句的相对性能差异是什么?

如果您只想组织您的代码,我会使用:

<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}
if (in_array("mac", $os)) {
    echo "Got mac";
}
?>

来源: http : //php.net/manual/en/function.in-array.php

首先,在您的示例中,您分配而不是比较。
赋值是用一个等号 ( = ) 完成的,而比较是用两个或(更确切地说)三个,在 php ( === ) 中完成的。

开关可能会稍微短一些,但不一定会使代码更具可读性或可维护性。
如果您的任何检查都为真,它应该打印“hello world”,这意味着开关将使用大量失败,这有点丑陋(并在一堆 IDE 中引发警告),或者要求您有echo "hello world"; 在所有情况下,这都会为每种情况添加额外的一行。

就个人而言,在这种情况下,我会使用一个包含要检查的值的数组,然后在 if 语句中使用in_array函数。
就像是:

$array = ['A', 'B', 'C']; // and so on.
if(in_array($val, $array)) {
  echo "hello world";
} 

编辑:
另外值得注意的是,关于开关,开关在比较时不会进行类型检查。
也就是说,当开关比较时,它使用==而不是===

如果您认为您可能想要为每个条件执行除 echo "hello world" 之外的其他操作,那么是的,我会使用开关。 如果我必须检查字母表中的 12 个字母,我也会使用开关。 否则,忘记开关。 if 语句显然对于组合表达式也非常方便。 就个人而言,我分解了这样很长的表达式:

if ( $var = 'A'
     ||
     $var = 'B'
     ||
     ( 
         $var = 'B' 
         && 
         $var = 'C' 
     )
     ||
     $var = 'D'
    ) {
    echo "hello world";
}

关于你的问题有2点。

1:对if条件使用双等号(==),否则条件将始终为真。

2:你可以使用switch case语句,如果你愿意的话。

switch ($var) {
  case 'A':
   case 'b':
    case 'c':
     case 'd':
        echo "hello world";
    break;
  default:
    // Default case
    break;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM