La RFC Make defining multiple default cases in a switch a syntax error partait du constat qu’il est aujourd’hui possible, en PHP, de placer plusieurs sections default dans un bloc switch.

Par exemple, en PHP 5.6, il est possible d’écrire ceci :

$a = 10;
switch ($a) {
    case 1:
        echo "cas 1\n";
        break;
    default:
        echo "premier default\n";
        break;
    default:
        // C'est dans ce second default qu'on passe, pas dans le premier
        echo "second default\n";
        break;
}

Dans ce cas, c’est la dernière section default qui est utilisée par PHP (là où, différences d’implémentation oblige, HHVM utilise la première).

Bien sûr, les discussions sur la mailing-list php-internals@afup ont montré que nous étions tous d’accord sur le fait qu’utiliser deux cas default dans une même structure switch n’a pas de sens et devrait donc être interdit et lever une erreur de syntaxe (en PHP 7). De plus, si PHP 5.7 sort un jour, cela devrait lever un avertissement E_DEPRECATED, pour préparer l’arrivée de PHP 7.  J’ai donc posté en ce sens sur internals@.

Cette RFC ayant été acceptée quelques jours après, PHP 7 sera plus cohérent sur ce point.