【发布时间】:2011-03-24 21:45:58
【问题描述】:
我最近遇到很多情况,我的条件非常简单,需要分支应用程序流。完成我正在做的事情的“最简单”方法只是一个普通的旧 if/elseif 声明:
if($value == "foo") {
// ...
} elseif($value == "bar") {
// ...
} elseif($value == "asdf" || $value == "qwerty") {
// ...
}
...但我也在考虑类似的事情:
switch($value) {
case "foo":
// ...
break;
case "bar":
// ...
break;
case "qwer":
case "asdf":
// ...
}
这似乎不太可读,但也许它的性能更高?但是,当条件中的“或”表达式越来越多时,switch语句似乎更具可读性和实用性:
switch($value) {
case "foo":
// ...
break;
case "bar":
case "baz":
case "sup":
// ...
break;
case "abc":
case "def":
case "ghi":
// ...
break;
case "qwer":
case "asdf":
// ...
}
我还看到了使用数组和函数对代码流进行分支的选项:
function branch_xyz() {/* ... */}
function branch_abc() {/* ... */}
function branch_def() {/* ... */}
$branches = array(
"xyz"=>"branch_xyz",
"abc"=>"branch_abc",
"def"=>"branch_def"
);
if(isset($branches[$value])) {
$fname = $branches[$value];
$fname();
}
这最后一个选项可能还具有可分布在多个文件中的好处,尽管它非常难看。
您认为在性能、可读性和易用性方面,哪个优势最大,且折衷最少?
【问题讨论】:
-
在您指定的情况下使用
switch更好。 -
性能甚至没有真正考虑到它。首先编写可读代码,然后在必要时进行分析和优化。
-
你可能想看看GOF Behavioral Patterns。
-
@Dave 和@STW:我正在寻找关于可读性和使用适当性的答案,而不是严格的性能。
标签: php if-statement switch-statement branch