Existe algum comando no PHP para parar de executar a if
instrução atual ou pai , igual break
ou break(1)
para switch
/ loop
. Por exemplo
$arr=array('a','b');
foreach($arr as $val)
{
break;
echo "test";
}
echo "finish";
no código acima, o PHP não funcionará echo "test";
e irá paraecho "finish";
Eu preciso disso para se
$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";
Quero break
a if
declaração acima e paro de executar echo "yes";
ou esses códigos que não são mais necessários para serem executados, pode haver ou não uma condição adicional, existe maneira de fazer isso?
Atualização: Apenas 2 anos depois de postar essa pergunta, eu cresci, aprendi como o código pode ser escrito em pequenos pedaços, por que os if's aninhados podem parecer um cheiro de código e como evitar esses problemas em primeiro lugar, escrevendo pequenas funções gerenciáveis.
echo
(no seu exemplo) nunca será executado. Então você também pode excluí-lo.try catch
uma opção?if (condition) { if ( oneothercondition ) stop; if ( yetothercondition ) stop; // go ahead , all is fine }
Respostas:
Não se preocupe com os comentários de outros usuários, eu entendo você, às vezes é necessário desenvolver essas coisas "sofisticadas" . Se conseguirmos quebrar um if, muitos ifs aninhados não serão necessários, tornando o código muito mais limpo e estético.
Este código de exemplo ilustra que CERTAS SITUAÇÕES onde foram violadas podem ser muito mais adequadas do que muitos ifs aninhados feios ... se você não tiver enfrentado essa determinada situação, não significa que ela não existe .
Código feio
Código bonito
Como @NiematojakTomasz diz, o uso de
goto
é uma alternativa, o ruim disso é que você sempre precisa definir o rótulo (ponto de destino).fonte
if
elseif
em cada teste com falha. Era exatamente isso que eu estava procurando, agora meu código é compatível com KISS e DRY :) Obrigado!Encapsule seu código em uma função. Você pode parar de executar uma função
return
a qualquer momento.fonte
maneira adequada de fazer isso:
Depois de ler alguns dos comentários, percebi que o tratamento de exceções nem sempre faz sentido para o controle de fluxo normal. Para um fluxo de controle normal, é melhor usar "If else":
Você também pode salvar os valores de retorno do processo nas variáveis e depois verificar os blocos de falha / exceção cujo processo falhou.
fonte
Porque você pode quebrar fora de um do / while loop, vamos " fazer " uma rodada. Com um tempo (falso) no final, a condição nunca é verdadeira e não se repetirá novamente.
fonte
Goto :
fonte
goto
, o bebê Jesus come um gatinho. Além disso, xkcd.com/292goto
palavra - chave nos códigos de produção e nunca tive problemas.Existe um comando:
goto
No entanto, lembre-
goto
se de não ser uma prática recomendada, pois faz com que o código seja formatado de maneira incomum.fonte
Você pode usar um do-while (false):
conforme descrito em http://php.net/manual/en/control-structures.if.php#90073
fonte
Não, não há como "quebrar" um bloco if como você faria dentro de loops.
:(
Então transforme seu teste em um
switch
!Eu me pergunto por que ninguém o incentivou a usar a instrução switch desde (mesmo que você não tenha muitos casos de teste).
Você acha que é muito detalhado?
Eu definitivamente aceitaria isso aqui
Para mim, as exceções são destinadas a gerar erros e não a realmente controlar falhas de execução.
Se o comportamento de interrupção que você está tentando definir não é sobre erros inesperados, o tratamento de exceções não é a solução certa aqui
:/
.fonte
:/
Dessa maneira, consegui o que queria. Eu uso um switch apenas com um caso definido e, em seguida, uso break-case para escolher se a condição. A razão pela qual eu uso a quebra: condição1 e condição2 pode satisfazer, nessa situação, apenas a condição1 é aplicada .IF é seletivo de acordo com a ordem.
fonte
switch(true) { case true:
Não.
Mas que tal:
fonte
if
declaraçõesif
declaração. Não tenho certeza de como você espera evitar isso.Basta mover o código que não deve ser executado para
else/elseif
ramificar. Realmente não vejo por que você gostaria de fazer o que está tentando fazer.fonte
A resposta simples é que não, não há como interromper uma
if
declaração sem interromper completamente a execução (viaexit
). Outras soluções não funcionarão para mim porque não posso alterar a estrutura daif
instrução, pois estou injetando código em um plug-in, assim:fonte
Respondendo à sua pergunta se isso é possível ou não, então sim, é possível usando o operador "goto" do php.
Mas, eticamente, não é uma boa prática usar "goto" e, como é necessário usar goto, isso significa que o código precisa ser reconstruído para que o requisito de goto possa ser removido.
De acordo com o código de exemplo que você postou acima, pode-se ver claramente que o código pode ser reconstruído e o código que não é mais necessário pode ser excluído ou comentado (se houver possibilidade de uso no futuro).
fonte
combinando suas declarações, acho que isso lhe daria o resultado desejado. limpo e simples, sem ter muitas declarações.
para o código feio e bonito, minha recomendação seria:
em algum lugar do seu código normal
fonte
Eu acho que você está procurando por isso:
O manual php mostra
for
exemplos, mas acho que também funciona paraif
fonte
Eu tenho uma solução simples, sem muitas mudanças. a declaração inicial é
então, parece simples. tente código como este.
se você quiser experimentar sem esse código, é simples. e você pode voltar quando quiser. outra solução são blocos de comentários. ou simplesmente pensando e tente outro código separado e copie e cole apenas o resultado no seu código final. e se um código não for mais necessário, no seu caso, o resultado poderá ser
com este código, a declaração original é completamente respeitada .. :) e mais legível!
fonte
A solução simples é comentar.
O benefício adicional é não alterar o código original e você pode datar, inicializá-lo e apresentar um motivo.
Por que o voto negativo, de acordo com a solicitação do OP, acho que essa é uma solução perfeitamente válida.
"Eu quero [quebrar a instrução if acima] e parar de executar o eco" yes "; ou esses códigos que não são mais necessários para serem executados, pode haver ou não uma condição adicional, existe alguma maneira de fazer isso?"
De fato, alguém poderia olhar para algumas das outras soluções, um ano depois, e se perguntar o que está acontecendo lá. Conforme minha sugestão, pode-se deixar uma boa documentação para referência futura, o que é sempre uma boa prática.
fonte
Que tal usar o operador ternário?
O que é idêntico a esta declaração if / else:
fonte
$a = $_POST['action'] ?? 'default';
Para parar completamente o restante do script, você pode simplesmente fazer
Saída; // No lugar do intervalo. O restante do código não será executado
fonte
Estou atrasado para a festa, mas queria contribuir. Estou surpreso que ninguém tenha sugerido
exit()
. É bom para testar. Eu uso o tempo todo e funciona como charme.O código irá parar em
exit()
e tudo depois não será executado.Resultado
Funciona com
foreach()
ewhile()
também. Funciona em qualquer lugar onde você realmente coloca.Resultado
Use-o com um
forloop()
Resultado
Em um cenário de caso normal
Resultado
fonte
fonte