删除重复的情况PHP链接中的切换语句(PHP链接)将要执行的代码的情况(案例)。像这样 :

switch ($a) {

case 'a' :

/* code here */

case 'b' :

/* code here */

default :

/* code here */

}

交换机语句中的重复代码

随着交换机的大小,很容易错过案例定义了两次。以下是PhpExcel库版本中的示例:

switch ($conditional->getStyle()->getFill()->getEndColor()->getRGB()) {

case '000000': $colorIdxFg = 0x08; break;

case 'FFFFFF': $colorIdxFg = 0x09; break;

case 'FF0000': $colorIdxFg = 0x0A; break;

case '00FF00': $colorIdxFg = 0x0B; break;

case '0000FF': $colorIdxFg = 0x0C; break;

case 'FFFF00': $colorIdxFg = 0x0D; break;

case 'FF00FF': $colorIdxFg = 0x0E; break;

case '00FFFF': $colorIdxFg = 0x0F; break;

case '800000': $colorIdxFg = 0x10; break;

case '008000': $colorIdxFg = 0x11; break;

case '000080': $colorIdxFg = 0x12; break;

case '808000': $colorIdxFg = 0x13; break;

case '800080': $colorIdxFg = 0x14; break;

case '008080': $colorIdxFg = 0x15; break;

/* more cases */

case 'CCCCFF': $colorIdxFg = 0x1F; break;

case '000080': $colorIdxFg = 0x20; break;

case 'FF00FF': $colorIdxFg = 0x21; break;

case 'FFFF00': $colorIdxFg = 0x22; break;

case '00FFFF': $colorIdxFg = 0x23; break;

case '800080': $colorIdxFg = 0x24; break;

case '800000': $colorIdxFg = 0x25; break;

case '008080': $colorIdxFg = 0x26; break;

/* more cases */

两份复制品粗体,您可以找到其他五个。这里,所有第二个案例都将被忽略并且可以至少从编程的角度下丢弃。从用户的角度来看,可能是那些0x20和0x21将在某些时候缺少。

有时,它非常明显,因为这段代码来自jQuery-file-upload:

switch ($type) {

case 'gif':

case 'png':

imagecolortransparent($new_img, imagecolorallocate($new_img, 0, 0, 0));

case 'png':

imagealphablending($new_img, false);

imagesavealpha($new_img, true);

break;

}

在这里,这是‘png’案例是两次,需要一些重构。有时候,它是一个忘记的复制/粘贴,因为它处于Simplepie:

switch ($this->consume())

{

case "\x09":

case "\x0A":

case "\x0B":

case "\x0B":

case "\x0C":

case "\x20":

case "\x3C":

case "\x26":

case false:

/* more code */

}

什么代码易于重复案例?

传统语句,长开关和具有分组案例的交换机。在编码时往往会在飞行中检查短的(1-2例),所以它们非常安全。

是否值得检查重复的情况?

重复的情况是纯死代码(仅其中一个实际使用),或者错误(某些情况拼写错误,并且不考虑情况)。找到重复的案例总是奖励。

交换机语句不是太多。比例从1到2种千分之二的代码。这不是一个繁重的任务。

如何检查

查找交换机语句是搜索操作。然后,短暂的,一到5-7例易于检查视觉。除此大尺寸外,如果案例太广泛分开,最好用IDE,排序和提取重复项,最佳提取案例语句。

这也是通过exakat静态审计工具自动完成的。