PHP para Iniciantes: Estruturas de Controle - BREAK

Tão agressivo quanto sugerido, break é uma instrução que serve para quebrar alguma coisa. Na verdade, sua semântica não é exatamente uma quebra, então não associe a tradução literal pois está mais ligada com a tradução encerrar.

Você pode dar algum exemplo do dia a dia, Kiko?

Claro. Lembra do $parafuso->apertar()? Quem já montou alguns móveis sabe que, às vezes, um parafuso se perde na entrega. Ou pior: você tem o número exato de parafusos e, por algum motivo, enquanto apertava... O parafuso simplesmente se desmanchou.

Quando esse último caso acontece, você pode até tentar apertar ou verificar se está firme: o problema é que você não tem como averiguar. À princípio, se você programa uma máquina para apertar até quando chegar na fricção considerada "firme", essa situação vai gerar um loop infinito. Você precisa ter uma validação que garanta que toda a função de apertar resulte em sucesso ou falha, onde desmantelar, com toda certeza, precisa ser identificada como uma falha.

E o que acontece quando uma ação repetitiva encontra uma falha? Bem, você precisa encerrar o laço. É para isso que serve o break. É outra coisa da programação que você faz sem perceber... Vê como seu cérebro é incrível?

Outra analogia que posso descrever tem um forte potencial de estar no seu dia-a-dia: escrever mensagem para a pessoa errada. Se você percebeu: break, para de digitar, interrompe o fluxo todo, volta pra pessoa certa e digita.

Se você não percebeu...

Vish... (não faça isso em casa)

Enfim, o ponto é que o loop desse exemplo seria o ato de digitar até completar a mensagem. Por algum motivo, você checou com quem estava falando enquanto digitava (mais uma coisa absurda do nosso cérebro) e fez a validação que te força a fazer um break em caso de falha.

Ok, eu comparei com a capacidade de processamento dos humanos e sei que não é tão simples assim, a questão é apenas entender a analogia, ok?!

Ok, Kiko, entendi... Mas como que usa isso?

Primeiramente você precisa saber quais estruturas suportam o uso do break. São elas:

  • while;
  • do-while;
  • for;
  • foreach;
  • switch (veremos em um artigo próximo).

Agora podemos falar sobre como aplicar, que não é tão complicado assim mas pode ser confuso e o motivo é claro: o break pode ser usado para encerrar múltiplos fluxos encadeados simultaneamente.

QUE

Isso significa que sua sintaxe aceita tanto o uso isolado (break;) quanto informando a quantidade de laços que devem ser encerrados (break <número>;). É pleonasmo usar um comando break 1, que equivale a escrever apenas break.

Encerrando somente um fluxo

É só usar o isolado:

<?php

while (true) {
    echo 'Esse comando poderia ser um loop infinito...' . PHP_EOL;
    break;
}
echo 'Se não fosse pelo break';

Encerrando mais de um fluxo

Aí é só informar a quantidade de estruturas que deseja encerrar. Lembrando que só encerra as estruturas onde é aceito, ou seja, se você tentar encerrar dois laços onde só existe um, irá receber erro.

<?php

while (true) {
    echo 'Esse comando poderia ser um loop infinito...' . PHP_EOL;
    while (true) {
        echo 'E esse um loop infinito dentro de um loop infinito' . PHP_EOL;
        break 2;
    }
}
echo 'Se não fosse pelo break';

Fácil, não é mesmo? Acho que gastei mais tempo escrevendo analogias do que ensinando, de fato. Hehehe.

Enfim... Curtiu? Comenta e compartilha! No próximo artigo irei falar sobre uma outra estrutura muito útil para laços repetitivos, o continue. Você faz ideia de pra que serve? Se não, espera um pouco que jaja eu te digo!

Inté!!