J'ai remarqué que vous pouvez en effet utiliser le mot clé continue
dans une instruction switch, mais sur PHP il ne fait pas ce que j'attendais.
S'il échoue avec PHP, qui sait combien d'autres langages il échoue aussi? Si je change beaucoup de langue, cela peut être un problème si le code ne se comporte pas comme je m'attends à ce qu'il se comporte.
Dois-je simplement éviter d'utiliser continue
dans une instruction switch alors?
PHP (5.2.17) échoue:
for($p = 0; $p < 8; $p++){
switch($p){
case 5:
print"($p)";
continue;
print"*"; // just for testing...
break;
case 6:
print"($p)";
continue;
print"*";
break;
}
print"$p\r\n";
}
/*
Output:
0
1
2
3
4
(5)5
(6)6
7
*/
C++ semble fonctionner comme prévu (saute à la fin de la boucle for):
for(int p = 0; p < 8; p++){
switch(p){
case 5:
cout << "(" << p << ")";
continue;
cout << "*"; // just for testing...
break;
case 6:
cout << "(" << p << ")";
continue;
cout << "*";
break;
}
cout << p << "\r\n";
}
/*
Output:
0
1
2
3
4
(5)(6)7
*/
Malheureusement, continue
et break
sont les mêmes dans PHP
lors de l'utilisation des instructions switch
.
Ne laissez pas PHP
gâcher vos expériences dans d'autres langues et continuez à utiliser continue
là où vous en avez besoin!
Essayez d'utiliser continue 2
pour passer à l'itération suivante de la boucle entourant l'instruction switch.
ÉDITER:
$foo = 'Hello';
for ($p = 0; $p < 8; $p++) {
switch($p) {
case 3:
if ($foo === 'Hello') {
echo $foo;
break;
} else {
continue 2;
}
default:
echo "Sleeping...<br>";
continue 2;
}
echo "World!";
break;
}
//This will print: Sleeping... Sleeping... Sleeping... Hello World!
La documentation de l'instruction PHP continue
le montre clairement:
Remarque: Notez que dans PHP l'instruction switch est considérée comme une structure en boucle aux fins de continuez.
Vous devez savoir que différents langages donnent aux mêmes mots clés des significations subtilement différentes, et ne pas supposer que PHP continue
se comporte de la même manière que C++ continue
.
Si continue
est logique dans un PHP switch
où cela ne fonctionnerait pas en C++, utilisez-le.
Si continue
est logique dans un C++ switch
où cela ne fonctionnerait pas en PHP, utilisez-le.
Comme le prévient le PHP Manual :
"Notez que dans PHP l'instruction switch est considérée comme une structure en boucle aux fins de continuer."
Ainsi, l'utilisation de continue sortira de l'instruction switch, pas de la boucle for. Les risques d'assumer une syntaxe similaire dans toutes les langues.
Il est important de noter que continue
et break
ne se comportent pas de la même manière lorsque l'instruction switch
est imbriquée dans une boucle. Si vous utilisez une instruction switch
pour évaluer quelque chose et que vous souhaitez passer à l'élément suivant dans la boucle si la condition est remplie, vous devez utiliser continue 2
. En utilisant break 2
dans ce cas se détachera de la boucle for
entière, ce qui peut ne pas être l'action souhaitée.
Utilisation de continue dans un C++ switch / case
la construction qui est intégrée dans une boucle est parfaitement OK. Vous ne devez pas restreindre votre style en C++ simplement à cause d'un mauvais comportement dans d'autres langages de programmation.
En C et C++, l'instruction switch
n'est qu'une combinaison sophistiquée de if/else if
et labels/goto
, donc utiliser continue
dans switch
est correct. Mais comme vous l'avez remarqué, il ne fait pas ce que vous attendez de lui dans d'autres langages similaires en C ou C++. C'est parce qu'ils ne sont similaires qu'en matière de syntaxe, pour les règles sémantiques, ce sont des bêtes très différentes. Donc, une chose qui fonctionne dans une langue ne fonctionnera certainement pas dans une autre même si les langues se ressemblent.