php - son - objetivo de la declaracion de cambio
¿Alguna vez debo usar continue dentro de una declaración de cambio? (7)
Observé que puedes usar la palabra clave continue
en una declaración de cambio, pero en PHP no hace lo que esperaba.
Si falla con PHP, ¿quién sabe cuántos otros idiomas también falla? Si cambio mucho de un idioma a otro, esto puede ser un problema si el código no se comporta como espero que se comporte.
¿Debería simplemente evitar continue
en una instrucción switch?
PHP (5.2.17) falla:
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 ++ parece funcionar como se espera (salta al final del ciclo 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
*/
Como se advierte en el Manual de PHP :
"Tenga en cuenta que en PHP la instrucción switch se considera una estructura de bucle para los fines de continuar".
Entonces, el uso de continuar saldrá de la instrucción switch, no del ciclo for. Los peligros de asumir una sintaxis similar en todos los idiomas.
Desafortunadamente, continue
y break
son los mismos en PHP
cuando se usan declaraciones de switch
.
No permita que PHP
arruine sus experiencias en otros idiomas, y continúe usando ¡ continue
donde lo necesite!
El uso de continuar dentro de un C ++ switch / case
construct que está incrustado en un bucle está perfectamente bien. No debe restringir su estilo en C ++ solo por el mal comportamiento que ocurre en otros lenguajes de programación.
En C y C ++, la instrucción switch
es solo una combinación elegante de if/else if
y labels / goto
, por lo que usar continue
inside switch
está bien. Pero como notó, no hace lo que espera en otros lenguajes que son similares a C o C ++. Eso es porque solo son similares cuando se trata de sintaxis, para las reglas semánticas son bestias muy diferentes. Entonces, una cosa que funciona en un idioma definitivamente no funcionará en otro, incluso si los idiomas son similares.
Es importante tener en cuenta que continue
y break
no se comportan igual cuando la instrucción switch
está anidada dentro de un bucle. Si está utilizando una instrucción switch
para evaluar algo, y desea pasar al siguiente elemento dentro del ciclo si se cumple la condición, debe usar continue 2
. El uso de break 2
en este caso saldrá de todo el ciclo for
, lo que puede no ser la acción deseada.
Intente utilizar continue 2
para continuar con la siguiente iteración del ciclo que rodea la instrucción de cambio.
EDITAR:
$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 documentación para la declaración de PHP continue
deja esto en claro:
Nota: Tenga en cuenta que en PHP, la instrucción switch se considera una estructura de bucle a los efectos de continuar .
Debe saber que los diferentes idiomas dan a las mismas palabras con significados sutilmente diferentes, y no asumen que PHP continue
comportándose igual que C ++.
Si continue
tiene sentido en un modificador de PHP donde no funcionaría en C ++, utilícelo.
Si continue
tiene sentido en un switch
C ++ donde no funcionaría en PHP, utilízalo.