PHP switch语句的最佳布局?

时间:2011-06-17 10:17:51

标签: php layout switch-statement code-layout

这一直困扰我一段时间:switch语句的最佳布局是什么,特别是在PHP中?

我发现自己这样做有两种方式,甚至没有考虑过。然后,有时当我回到代码时,我觉得它看起来不正确,并以另一种方式重写它。重复!

方法1

switch($action)
{
  case 'a':
    //do something
  break;

  case 'b':
    //do something
  break;
}

优点:

  • 我觉得case / break与switch / if语句中的括号一样排列。
  • 我认为看起来更好

缺点:

方法2

switch($action)
{
  case 'a':
    //do something
    break;

  case 'b':
    //do something
    break;
}

优点:

缺点:

  • 在查看代码时,我遇到了一个休息时间,我有时觉得if语句中缺少一个结束括号,因为它到目前为止是缩进的。

所以我的问题是,布局切换语句的正确方法是什么?我在使用方法1时错了吗?

6 个答案:

答案 0 :(得分:18)

方法3

switch($action)
{
    case 'a' : 
    {
        //do 
        //something

        break;
    }

    case 'b' : 
    {
        //do 
        //something

        break;
    }
}

或更紧凑

switch( $action ) {
    case 'a' : {
        //do 
        //something

        break;
    }
    case 'b' : {
        //do 
        //something

        break;
    }
}

完全可选但有效的括号语法。极大地提高了可读性,特别是对于非常大的案例陈述。

答案 1 :(得分:7)

以下格式化方式是我在其他人的代码中看到的最多,也是我喜欢格式化的方式:

switch($action)
{
    case 'login': 
        $this->userLogin($username); 
        break;

    case 'post': 
        $this->userPost($username); 
        break;

    case 'update': 
        $this->userUpdate($username); 
        break;

    case 'logout': 
        $this->userLogout($username); 
        break;

}

我也看到它像这样使用过。注意缩进?实际上它是有道理的,因为动作(执行某些操作的代码)只有一个缩进,远离{}括号,就像常规functionif一样声明。然而,对我来说,它使已经奇怪的switch陈述更加奇怪。

switch($action)
{
case 'login': 
    $this->userLogin($username); 
    break;

case 'post': 
    $this->userPost($username); 
    break;

case 'update': 
    $this->userUpdate($username); 
    break;

case 'logout': 
    $this->userLogout($username); 
    break;

}

当我有一个很长的switch语句时,每个语句只有一个动作,我有时会使用以下方法。我认为这使它非常易读。

switch($action)
{
    case 'login'    : $this->userLogin($username); break;
    case 'post'     : $this->userPost($username); break;
    case 'update'   : $this->userUpdate($username); break;
    case 'logout'   : $this->userLogout($username); break;
}

使用return时看起来更好,在这种情况下不需要break

switch($action)
{
    case 'login'    : return $this->userLogin($username);
    case 'post'     : return $this->userPost($username);
    case 'update'   : return $this->userUpdate($username);
    case 'logout'   : return $this->userLogout($username);
}

就像一个例子,它甚至可以像这样格式化,而不是使用{}括号,而是使用:endswitch

switch($action):
    case 'login'    : return $this->userLogin($username);
    case 'post'     : return $this->userPost($username);
    case 'update'   : return $this->userUpdate($username);
    case 'logout'   : return $this->userLogout($username);
endswitch;

答案 2 :(得分:5)

很抱歉发布这个作为答案,但我无法将其纳入评论:

我更喜欢方法2,因为:

  • 休息不会干扰 案件的可读性

  • 有时您会在条件内休息,例如:

    if(...) {
      break;
    }
    

    所以案件可以落入到下一个案例或什么的。

    对于我个人的偏好,在这种情况下使用方法1会感觉很尴尬,因为break似乎缩进“太多”。

答案 3 :(得分:1)

没有正确或不正确的方法; switch语句语法是非平衡的,因此没有方法可以“正确”。

事实上的标准似乎是第二种方法。但是如果您对编程语言感到满意,那么缩进方案并不重要,只要对于给定的代码块使用

答案 4 :(得分:-2)

switch($option){
case 'a': 
//do something; 
break;
case 'b': 
//do something; 
break;
default:
break;
}

答案 5 :(得分:-2)

都不是。

不是"我有更好的方法,你应该使用它而不是#34;但是"没关系。"

许多程序员都会对间距,缩进等进行肛门保留。但重点是代码是可读的,因为它不会影响它实际运行的方式。您可以通过间距,缩进,额外的行返回,分隔部分的漂亮注释等来使代码可读。

这没关系:

switch ('hi'){
    case 'hi': 
        PRINT "HI!";}

这也没关系:

switch ('hi')
{
    case 'hi': 
        PRINT "HI!";
}

也没关系:

    switch ('hi'){
        case 'hi': PRINT "HI!";
    }

非常非标准且耗时,所以我不知道你做了什么,但也没关系:

// *
switch ('hi')
{
// ****   
case 'hi': PRINT "HI!";
// ****
}
// *

说真的,只要人们能够阅读并轻易辨别出正在发生的事情,那就没问题了。

除非你的同事和编码员非常专注于一种风格和强迫症。此时,您需要将所有代码更正为不同的样式,以使您的工作场所不那么无聊。

注意:我开玩笑说改变你的同事'代码来改变他们的编码风格。这通常被视为被动攻击,只会使工作场所充满敌意。