1

我对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";
        }
    }
}
4

3 回答 3

4

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

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

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

switch ( $type ) {
    case 'banana': 
        $valid = true;
        $price = 1;
        break;
     case 'apple': 
        $valid = false;
        $price = 2.52;
        break;
}
于 2012-06-27T02:06:44.313 回答
2

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

于 2012-06-27T02:28:12.833 回答
1

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

于 2012-06-27T02:06:02.097 回答