【问题标题】:php - Is switch always better than a lot of elseifs?php - switch 总是比很多 elseif 更好吗?
【发布时间】:2012-06-27 01:59:58
【问题描述】:

我对php中的switch不是很熟悉,但是我听说如果你的代码有很多elseif,最好用switch来代替。我尝试将下面的代码更改为 switch,但由于我在每个 elseif 处检查两个或三个值,因此似乎使用 elseif 而不是 switch 对我来说更合乎逻辑(也许我错了)。

所以我的问题是,您对下面的代码有何建议? Elseif 还是 switch?

如果我想把代码改成switch,你能给我一些提示吗?

非常感谢您!

(顺便说一句,block_check 和 report_check 是复选框,reported_msg 是文本)

public function block_user(){
    if(isset($_POST['submitted'])){

        $block_check = $_POST['block_check'];
        $report_check = $_POST['report_check'];     
        $reported_msg = $_POST['reported_msg']);

        if((!($block_check)) && (!($report_check))){
            echo "dont send, both not checked";

        }elseif(($report_check) && ($reported_msg == '')){
            echo "dont send, msg box is empty";

        }elseif((!($report_check)) && ($reported_msg != '')){
            echo "dont send, report_check is not checked";

        }elseif(($block_check) && (!($report_check)) && ($reported_msg == '')){
            echo "just process block";

        }elseif((!($block_check)) && ($report_check) && ($reported_msg != '')){
            echo "just process report";

        }elseif(($block_check) && ($report_check) && ($reported_msg != '')){
            echo "process both block and report";
        }
    }
}

【问题讨论】:

  • 如果你要检查多个这样的值,你可能会被 elseifs 卡住。它们没有任何问题,只是打字多一些,阅读难度稍大一些。
  • @Andrew 感谢您的评论。我只会使用 elseif。
  • 你使用了很多不需要的括号。如果它像那样大,解释器运行您的代码需要更长的时间。例如,您的第一个 if 语句 (if((!($block_check)) && (!($report_check))){) 可以重写为:if(!$block_check && !$report_check){
  • @C0deH4cker 感谢您的评论!学到了一些我不知道的东西。我一定会解决的!

标签: php switch-statement if-statement


【解决方案1】:

Switch 在某些情况下非常好,但在其他情况下却非常糟糕。在您的具体情况下,我会使用 if/elseif 条件。

当条件简单且表达式简单时,我使用switch。如果条件有多个变量并且表达式长于大约三行,我不会使用开关。

这是一个很好的开关的好例子:

switch ( $type ) {
    case 'banana': 
        $valid = true;
        $price = 1;
        break;
     case 'apple': 
        $valid = false;
        $price = 2.52;
        break;
}

【讨论】:

  • 按照你的建议,我将只使用 elseif。感谢您的明确答复!
【解决方案2】:

老实说,这在很大程度上与可读性和品味有关。我更喜欢 elseif 语句,因为如果条件变得更复杂,它可以提供更大的灵活性。

【讨论】:

  • 感谢您的回答。在这种情况下,我将坚持使用 elseif。
【解决方案3】:

为了优化您的代码,您希望将最常用的if 语句放在elseif 语句块的顶部。否则,唯一的区别在于代码的可读性,这实际上是使用switch statments 的重要原因。

【讨论】:

  • 感谢您的回答!我一定会应用您建议的优化。
  • 这样做是为了“优化”。这样做是为了可读性。 switch 有一个巨大的缺点,不允许在每个分支连接处进行任意表达式求值。
  • @pst 你能举个例子来解释一下吗?
猜你喜欢
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2010-09-25
  • 1970-01-01
  • 2017-09-11
  • 2018-01-30
  • 1970-01-01
相关资源
最近更新 更多