Existe-t-il une commande en PHP pour arrêter d'exécuter l'instruction courante ou parente if
, identique à break
ou break(1)
pour switch
/ loop
. Par exemple
$arr=array('a','b');
foreach($arr as $val)
{
break;
echo "test";
}
echo "finish";
dans le code ci-dessus, PHP ne fera pas echo "test";
et ira àecho "finish";
J'ai besoin de ça pour 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";
Je veux break
la if
déclaration ci-dessus et arrêter l'exécution de echo "yes";
tels codes qui ne sont plus nécessaires pour être exécutés, il peut y avoir ou non une condition supplémentaire, y a-t-il un moyen de le faire?
Mise à jour: Seulement 2 ans après avoir posé cette question, j'ai grandi, j'ai appris comment le code peut être écrit en petits morceaux, pourquoi les if imbriqués peuvent être une odeur de code et comment éviter de tels problèmes en premier lieu en écrivant de petites fonctions gérables.
echo
(dans votre exemple) ne sera jamais exécuté. Vous pouvez donc tout aussi bien le supprimer.try catch
une option?if (condition) { if ( oneothercondition ) stop; if ( yetothercondition ) stop; // go ahead , all is fine }
Réponses:
Ne vous inquiétez pas des commentaires des autres utilisateurs, je peux vous comprendre, PARFOIS, lors du développement de ce "chic", des choses sont nécessaires . Si nous pouvons casser un if, beaucoup de if imbriqués ne seront pas nécessaires, ce qui rendra le code beaucoup plus propre et esthétique.
Cet exemple de code illustre que CERTAINES SITUATIONS où interrompues si peuvent être beaucoup plus appropriées que beaucoup de si imbriqués laids ... si vous n'avez pas fait face à cette certaine situation ne signifie pas qu'elle n'existe pas .
Code laid
Beau code
Comme le dit @NiematojakTomasz, l'utilisation de
goto
est une alternative, la mauvaise chose à ce sujet est que vous devez toujours définir l'étiquette (cible de point).la source
if
elseif
sur chaque test échoué. C'est exactement ce que je cherchais, maintenant mon code est compatible KISS et DRY :) Merci!Encapsulez votre code dans une fonction. Vous pouvez arrêter d'exécuter une fonction avec
return
à tout moment.la source
bonne façon de faire ceci:
Après avoir lu certains des commentaires, j'ai réalisé que la gestion des exceptions n'a pas toujours de sens pour le contrôle de flux normal. Pour un flux de contrôle normal, il est préférable d'utiliser "If else":
Vous pouvez également enregistrer les valeurs de retour du processus dans des variables, puis archiver les blocs d'échec / d'exception dont le processus a échoué.
la source
Parce que vous pouvez sortir d'un do / while, laissez - nous « faire » un tour. Avec un while (faux) à la fin, la condition n'est jamais vraie et ne se répétera pas, encore une fois.
la source
aller :
la source
goto
, le bébé Jésus mange un chaton. Aussi, xkcd.com/292goto
mot - clé dans les codes de production et je n'ai jamais eu de problèmes.Il existe une commande:
goto
Cependant, rappelez
goto
- vous n'est pas une pratique recommandée, car cela rend le code à être formaté de manière inhabituelle.la source
Vous pouvez utiliser un do-while (false):
comme décrit dans http://php.net/manual/en/control-structures.if.php#90073
la source
Non, il n'y a aucun moyen de "casser" un bloc if comme vous le feriez à l'intérieur de boucles.
:(
Alors transformez votre test en un
switch
!Je me demande pourquoi personne ne vous a encouragé à utiliser l' instruction switch depuis (même si vous n'avez pas beaucoup de cas de test)
Pensez-vous que c'est trop verbeux?
J'irais certainement ici
Pour moi, les exceptions sont destinées à soulever des erreurs et pas vraiment à contrôler les défauts d'exécution.
Si le comportement de rupture que vous essayez de définir ne concerne pas les erreurs inattendues, la gestion des exceptions n'est pas la bonne solution ici
:/
.la source
:/
De cette façon, j'ai ce que je veux. J'utilise un interrupteur qui n'a qu'un cas défini, puis j'utilise break au cas où choisir si condition. La raison pour laquelle j'utilise la rupture: condition1 et condition2 peuvent toutes deux satisfaire, dans cette situation, seule la condition1 est appliquée .IF est sélectif en fonction de l'ordre.
la source
switch(true) { case true:
Non.
Mais que diriez-vous:
la source
if
déclarationsif
déclaration. Je ne sais pas comment vous comptez éviter cela.Déplacez simplement le code qui n'est pas censé être exécuté vers la
else/elseif
branche. Je ne vois pas vraiment pourquoi voudriez-vous faire ce que vous essayez de faire.la source
La réponse simple est que non, il n'y a pas de moyen de rompre avec une
if
instruction sans arrêter complètement l'exécution (viaexit
). D'autres solutions ne fonctionneront pas pour moi car je ne peux pas changer la structure de l'if
instruction, puisque j'injecte du code dans un plugin, comme ceci:la source
En réponse à votre question de savoir si cela est réalisable ou non, alors oui, c'est réalisable en utilisant l'opérateur "goto" de php.
Mais éthiquement, ce n'est pas une bonne pratique d'utiliser "goto" et s'il est nécessaire d'utiliser goto, cela signifie que le code doit être reconstruit de sorte que l'exigence de goto puisse être supprimée.
Selon l'exemple de code que vous avez publié ci-dessus, il est clairement visible que le code peut être reconstruit et que le code qui n'est plus nécessaire peut être supprimé ou commenté (si la possibilité existe pour une utilisation future).
la source
en combinant vos déclarations, je pense que cela vous donnerait le résultat souhaité. propre et simple, sans avoir trop de déclarations.
pour le code laid et beau, ma recommandation serait:
quelque part dans votre code normal
la source
Je pense que vous recherchez ceci:
Le manuel php montre des
for
exemples, mais je pense que cela fonctionne aussi pourif
la source
J'ai une solution simple sans beaucoup de changements. la déclaration initiale est
donc, cela semble simple. essayez un code comme celui-ci.
si vous voulez essayer sans ce code, c'est simple. et vous pouvez revenir quand vous le souhaitez. une autre solution est les blocs de commentaires. ou simplement penser et essayer dans un autre code séparé et copier-coller uniquement le résultat dans votre code final. et si un code n'est plus nécessaire, dans votre cas, le résultat peut être
avec ce code, la déclaration d'origine est totalement respectée .. :) et plus lisible!
la source
La solution simple est de le commenter.
L'avantage supplémentaire est que vous ne modifiez pas votre code d'origine et que vous pouvez le dater, le parapher et en indiquer la raison.
Pourquoi voter contre, selon la demande du PO, je pense que c'est une solution parfaitement valable.
"Je veux [casser l'instruction if ci-dessus et] arrêter d'exécuter echo" yes "; ou de tels codes qui ne sont plus nécessaires pour être exécutés, il peut y avoir ou non une condition supplémentaire, y a-t-il un moyen de le faire?"
En fait, quelqu'un pourrait examiner certaines des autres solutions, un an plus tard, et se demander ce qui se passe là-bas. Selon ma suggestion, on pourrait laisser une bonne documentation pour référence future, ce qui est toujours une bonne pratique.
la source
Qu'en est-il de l'utilisation de l'opérateur ternaire?
Ce qui est identique à cette instruction if / else:
la source
$a = $_POST['action'] ?? 'default';
Pour arrêter complètement l'exécution du reste du script, vous pouvez simplement faire
sortie; // À la place de la pause. Le reste du code ne s'exécutera pas
la source
Je suis en retard à la fête mais je voulais contribuer. Je suis surpris que personne n'ait suggéré
exit()
. C'est bon pour les tests. Je l'utilise tout le temps et fonctionne comme du charme.Le code s'arrêtera à
exit()
et tout ce qui suit ne fonctionnera pas.Résultat
Cela fonctionne aussi bien avec
foreach()
etwhile()
. Cela fonctionne partout où vous le placez vraiment.Résultat
Utilisez-le avec un
forloop()
Résultat
Dans un scénario normal
Résultat
la source
la source