我知道这个话题之前已经在这里讨论过,但是这个案例没有提到,我仍然不肯定哪个更好。
如果你有一个 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
如果你认为你可能想做一些事情,而不是为每个条件回显"hello world",那么是的,我会使用开关。如果我必须检查字母表中的 12 个字母,我也会使用开关。否则,请忘记开关。if 语句对于组合表达式显然也非常方便。就个人而言,我分解了像这样的长表达式:
if ( $var = 'A'
||
$var = 'B'
||
(
$var = 'B'
&&
$var = 'C'
)
||
$var = 'D'
) {
echo "hello world";
}
您的问题有 2 点。
1:使用双等号 (==) 和 if 条件,其他条件将始终为真。
2:如果你愿意,你可以使用开关大小写语句。
switch ($var) {
case 'A':
case 'b':
case 'c':
case 'd':
echo "hello world";
break;
default:
// Default case
break;
}
首先,在你的例子中,你分配而不是比较。
赋值是用一个等号(=
)完成的,而比较是用两个或(更确切地说)三个等号完成的,在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";
}
编辑:
另外值得注意的是,关于开关,开关在比较时不进行类型检查。
也就是说,当交换机比较时,它使用==
而不是===
。