¿Hay algún comando en PHP para detener la ejecución de la if
declaración actual o principal , igual break
o break(1)
para switch
/ loop
? Por ejemplo
$arr=array('a','b');
foreach($arr as $val)
{
break;
echo "test";
}
echo "finish";
en el código anterior PHP no lo hará echo "test";
e irá aecho "finish";
Necesito esto para si
$a="test";
if("test"==$a)
{
break;
echo "yes"; // I don't want this line or lines after to be executed, without using another if
}
echo "finish";
Quiero break
la if
declaración anterior y dejar de ejecutar echo "yes";
o los códigos que ya no son necesarios para ejecutar, puede haber o no una condición adicional, ¿hay alguna manera de hacerlo?
Actualización: solo 2 años después de publicar esta pregunta, crecí, aprendí cómo se puede escribir el código en pequeños fragmentos, por qué anidar si puede ser un olor a código y cómo evitar tales problemas en primer lugar escribiendo funciones manejables y pequeñas.
echo
(en su ejemplo) nunca se ejecutará. Así que también podrías eliminarlo.try catch
una opción?if (condition) { if ( oneothercondition ) stop; if ( yetothercondition ) stop; // go ahead , all is fine }
Respuestas:
No se preocupe por los comentarios de otros usuarios, puedo entenderlo, A VECES al desarrollar estas cosas "sofisticadas" son necesarias . Si podemos romper un if, no serán necesarios muchos ifs anidados, haciendo que el código sea mucho más limpio y estético.
Este código de ejemplo ilustra que CIERTAS SITUACIONES en las que se viola pueden ser mucho más adecuadas que muchos ifs feos y anidados ... si no ha enfrentado esa situación determinada no significa que no exista .
Código feo
Código de buena apariencia
Como dice @NiematojakTomasz, el uso de
goto
es una alternativa, lo malo de esto es que siempre debe definir la etiqueta (objetivo de punto).fuente
if
elseif
en cada prueba fallida. Esto es exactamente lo que estaba buscando, ahora mi código es compatible con KISS y DRY :) ¡Gracias!Encapsula tu código en una función. Puede dejar de ejecutar una función
return
en cualquier momento.fuente
forma correcta de hacer esto:
Después de leer algunos de los comentarios, me di cuenta de que el manejo de excepciones no siempre tiene sentido para el control de flujo normal. Para un flujo de control normal, es mejor usar "If else":
También puede guardar los valores de retorno del proceso en variables y luego verificar en los bloques de falla / excepción qué proceso ha fallado.
fuente
Porque se puede romper de un do / while, vamos a " hacer " una ronda. Con un tiempo (falso) al final, la condición nunca es verdadera y no se repetirá nuevamente.
fuente
ir a :
fuente
goto
, el Niño Jesús se come un gatito. Además, xkcd.com/292goto
palabra clave en los códigos de producción y nunca he tenido problemas.Existe un comando:
goto
Sin embargo, recordar
goto
no es una práctica recomendada, porque hace que el código se formatee de forma inusual.fuente
Podría usar un do-while (falso):
como se describe en http://php.net/manual/en/control-structures.if.php#90073
fuente
No, no hay forma de "romper" un bloque if como lo haría dentro de los bucles.
:(
¡Así que convierte tu prueba en una
switch
!Me pregunto por qué nadie lo alentó a usar la declaración de cambio ya que (incluso si no tiene muchos casos de prueba)
¿Cree que es demasiado detallado?
Definitivamente lo haría aquí
Para mí, las excepciones están destinadas a generar errores y no a controlar realmente la falla de ejecución.
Si el comportamiento de interrupción que está intentando establecer no se trata de errores inesperados, el manejo de excepciones no es la solución correcta aquí
:/
.fuente
:/
De esta manera obtuve lo que quiero. Utilizo un interruptor solo tiene un caso definido y luego uso break in case para elegir si condición. La razón por la que uso el corte: la condición1 y la condición2 pueden satisfacer, en esa situación solo se aplica la condición1 .IF es selectivo según el orden.
fuente
switch(true) { case true:
No.
Pero que tal:
fuente
if
declaracionesif
declaración. No estoy seguro de cómo esperas evitar esto.Simplemente mueva el código que no debe ejecutarse a la
else/elseif
bifurcación. Realmente no veo por qué querrías hacer lo que estás tratando de hacer.fuente
La respuesta simple es que no, no hay una manera de romper una
if
declaración sin detener completamente la ejecución (víaexit
). Otras soluciones no funcionarán para mí porque no puedo cambiar la estructura de laif
declaración, ya que estoy inyectando código en un complemento, así:fuente
Respondiendo a su pregunta si eso se puede lograr o no, entonces sí, eso se puede lograr utilizando el operador "goto" de php.
Pero éticamente, no es una buena práctica usar "goto" y si hay alguna necesidad de usar goto, entonces esto significa que el código debe reconstruirse de tal manera que se pueda eliminar el requisito de goto.
De acuerdo con el código de muestra que publicó anteriormente, se puede ver claramente que el código se puede reconstruir y el código que ya no es necesario se puede eliminar o comentar (si existe la posibilidad de usarlo en el futuro).
fuente
combinando sus declaraciones, creo que esto le daría el resultado deseado. limpio y simple, sin tener demasiadas declaraciones.
para el código feo y atractivo, mi recomendación sería:
en algún lugar de tu código normal
fuente
Creo que estás buscando esto:
El manual de php muestra
for
ejemplos, pero creo que también funciona paraif
fuente
Tengo una solución simple sin muchos cambios. la declaración inicial es
Entonces, parece simple. prueba un código como este.
si quieres probar sin este código, es simple. y puedes retroceder cuando quieras. Otra solución son los bloques de comentarios. o simplemente pensando e intente con otro código separado y copie y pegue solo el resultado en su código final. y si un código ya no es necesario, en su caso, el resultado puede ser
con este código, la declaración original se respeta por completo ... :) y es más legible.
fuente
La solución simple es comentarlo.
El beneficio adicional es que no está cambiando su código original y puede fecharlo, inicializarlo y explicar el motivo.
Por qué el voto negativo, de acuerdo con la solicitud de OP, creo que esta es una solución perfectamente válida.
"Quiero [romper la declaración if anterior y] dejar de ejecutar echo" yes "; o tales códigos que ya no son necesarios para ejecutar, puede haber o no una condición adicional, ¿hay alguna forma de hacerlo?"
De hecho, alguien podría mirar algunas de las otras soluciones, un año más tarde y preguntarse qué está pasando allí. Según mi sugerencia, uno podría dejar buena documentación para referencia futura, que siempre es una buena práctica.
fuente
¿Qué pasa con el uso del operador ternario?
Que es idéntico a esta declaración if / else:
fuente
$a = $_POST['action'] ?? 'default';
Para detener por completo la ejecución del resto del script, simplemente puede hacer
salida; // En lugar de descanso. El resto del código no se ejecutará
fuente
Llego tarde a la fiesta pero quería contribuir. Me sorprende que nadie sugirió
exit()
. Es bueno para probar. Lo uso todo el tiempo y funciona a las mil maravillas.El código se detendrá
exit()
y todo lo demás no se ejecutará.Resultado
Funciona con
foreach()
ywhile()
también. Funciona en cualquier lugar donde lo coloques realmente.Resultado
Úselo con un
forloop()
Resultado
En un caso normal
Resultado
fuente
fuente