php - 交换机总是比很多其他的更好吗?

时间:2012-06-27 01:59:59

标签: php switch-statement if-statement

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

所以我的问题是,你对下面的代码有什么建议? Elseif还是开关?

如果我想将代码更改为switch,你能给我一些提示吗?

提前非常感谢你!

(顺便说一句,block_check和report_check是复选框,reports_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";
        }
    }
}

3 个答案:

答案 0 :(得分:4)

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

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

以下是良好转换的一个很好的例子:

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

答案 1 :(得分:2)

大部分都是关于可读性和品味的,老实说。我更喜欢elseif语句,因为如果条件变得更复杂,它可以提供更大的灵活性。

答案 2 :(得分:1)

要优化代码,您希望将最常用的if语句放在elseif语句块的顶部。否则,唯一的区别在于代码的可读性,这实际上是使用switch个参数的一个很好的理由。