PHP编码样式返回;在开关/外壳中

2022-08-30 08:35:57

我们正试图为我们的团队实现新的编码风格指南,当没有发现“中断”时,php codeniffer会在switch case语句上打印警告,例如:

switch ($foo) {   
    case 1:
      return 1;   
    case 2:
      return 2;   
   default:
       return 3; 
}

有什么好的理由使用:

   switch ($foo) {
       case 1:
         return 1;
         break;
   }

??突破是永远达不到的?


答案 1

从 .breakreturnswitch

但是,将显式 s 添加到每个作为防御性编程实践是相当普遍的做法。breakcase

switch ($foo) {
    case 1:
        return 1;
        break;

    case 2:
        return 2;
        break;
}

这个想法是,如果您以后更改代码并删除 return 语句,则可能会忘记添加 .case 1break

这将意外导致程序流落入 。case 2

switch ($foo) {
    case 1:
        somethingDifferent();

    case 2:
        return 2;
        break;
}

忽略 case 语句有点不寻常,在执行此操作时,应向代码添加注释,以表明它是有意为之。

switch ($foo) {
    case 1:
        somethingDifferentAndWeWantToDoCase2AsWell();
        // fallthrough

    case 2:
        return 2;
        break;
}

与许多防御性编程练习一样,您必须平衡代码膨胀(这可能会使您的代码混乱并使其可读性降低)是否值得。


答案 2

如果你的“php codeniffer正在打印警告”,请尝试获得另一个更好的codeniffer,不要忘记尝试使用最后一个PHP稳定版本。当然,你可以写一个后一个,但它没有意义,因为它永远不会被阅读。您的代码正常。breakreturn

看看这个:

$fun = function(int $argument): string {
    switch ($argument) {
        case 1:
            return "one";
        case 2:
            return "two";
        default:
            return "more than two";
    }
};
$str = $fun(4); // return "more than two"

在我看来,这更简单,更好:更少的行=>更少的代码来维护:-)


推荐