作为一个PHP程序员面对很多(深入)语句,我很好奇你是如何处理这个问题的。您使用的是switch,if-elseif-else还是if-else结构?
我个人更喜欢在处理超过2种情况时使用开关选择器。从性能角度来看,这也是最佳方式吗?嵌套语句怎么样?
我很想你喜欢的方法和答案。
实施例
需要三选项选择器:
使用开关:
switch($option)
{
case 1 : $result= "foo"; break;
case 2 : $result= "bar"; break;
default : $result= "foobar";
}
使用if-elseif-else
if($option == 1)
{
$result= "foo";
} elseif ($option == 2)
{
$result= "bar";
} else
{
$result= "foobar";
}
使用if-if-else
if($option == 1)
{
$handle = "foo";
}
if($option == 2)
{
$result = "bar";
}
else
{
$result = "foobar";
}
答案 0 :(得分:1)
当你在许多情况下共享一条逻辑时,我发现交换机很方便。 即
case 1:
case 2:
case 3:
// do stuff for 1, 2 and 3
break;
case 4:
// other stuff just for 4
break;
default:
// fallback for everything else
break;
同样重要的是要注意切换执行loose comparison,这在某些情况下可能是不受欢迎的
从绩效角度来看,没有太多话要说
答案 1 :(得分:1)
除了新手程序员之外,每个人都知道switch
比if..else
更快,但switch
无法替换您在if
中放置的每个复合表达式语句(例如两个带有逻辑AND的表达式)
另外,如果您正在谈论像这样的深层嵌套代码
function foo()
{
if ( /* expr1 */ )
{
// code
if ( /* expr2 */ )
{
// code
if ( /* expr3 */ )
{
// code
if ( /* expr4 */ )
{
// code
}
}
}
}
}
然后我只能说,请停止这样做。有一些保护条件将迫使函数提前退出。以上是用这种风格重写的。
function foo()
{
if ( !/* exp r1 */ )
{
return;
}
// code 1
if ( !/* expr 2 */ )
{
return;
}
// code 2
if ( !/* expr 3 */ )
{
return;
}
// code 3
if ( !/* expr 4 */ )
{
return;
}
// code 4
}
当然,通过添加更多功能,真实应用程序中的这些都可能会更好地重构。
答案 2 :(得分:1)
我想说如果你看看这三个例子,最容易选择的是最漂亮和最干净的例子:switch语句。如果你能接受开关的松散比较,那就选择它。在这个层面上,性能方面的考虑通常是毫无意义的,因为潜在的收益是微不足道的。
答案 3 :(得分:1)
我通常更喜欢使用最新颖,最易理解的方法。但是,我尽量避免问这个问题。必须在代码中使用大量if / else块表示您的设计存在问题 鉴于创建关联数组很容易,没有理由不能将键映射到函数或值,这些函数或值可能会比除了普通数据集之外的任何东西都优于switch语句。或者甚至更好地使用polymorphism这是一个更简洁的解决方案,并且经常将大的if或switch块转换为单个函数调用。
答案 4 :(得分:1)
如果您需要这种微优化,则应使用其他语言。 作为一个懒惰的程序员,我喜欢去做这类事情:
class blabla{
private $_actions;
public function __construct(){
$this->_actions = array(1 => '_firstAction',
2 => '_secondAction',
3 => '_thirdAction');
}
public function whatever($choice){
if(isset($this->_actions[$choice])){
$this->{$this->_actions[$choice]}();
}
}
private function _firstAction(){}
private function _secondAction(){}
private function _thirdAction(){}
}