No Duplicate Case In Switch
July 3, 2015 ยท View on GitHub
Disallow the creation of duplicate case in switch statement.
Duplicate case happens when the same value is used several times as target for case :
<?php
switch($a) {
case 1:
break 1;
case 2:
break 1;
case 3:
break 1;
case 1: // double case
break 1;
default:
}
?>
Duplicate case may also happen when several targets are the same when compared with ==. Mixing types will lead to confusion as PHP might consider them equals. For example, the following are all duplicate :
<?php
switch($a) {
case array(1):
break 1;
case 1: // double case
break 1;
case 'asdf'; // double case
break 1;
case 1.0: // double case
break 1;
case true: // double case
break 1;
default:
}
?>
This is useless as the second defined case will be silently ignored.
It is recommended to check that all case values are distinct. It is also recommended to check that case's target are of the same time.
Rule Details
This rule require that every switch() statement has unique literal case, or complex calls. The following patterns are wrong.
<?php
// duplicate case
switch($a) {
case 1:
break 1;
case 2:
break 1;
case 3:
break 1;
case 1: // double case
break 1;
default:
}
// mixing types for target
switch($a) {
case array(1):
break 1;
case 1: // double case
break 1;
case 'asdf'; // double case
break 1;
case 1.0: // double case
break 1;
case true: // double case
break 1;
default:
}
?>
The following patterns are considered OK :
<?php
switch($a) {
case $a + 1 == 2: // complex comparison. Should be reviewed
break 1;
case 3:
break 1;
case 1:
break 1;
default:
}
// normal switch
switch($a) {
case 2:
case 3: // fall through
break 1;
case 1:
break 1;
default:
}
?>