Curso de PHP: #22 - Qual a diferença entre break e exit / die?

Fala escoteiro, tudo bem!? Subindo mais um degrau em nossa escadaria para o sucesso com o PHP vimos no post anterior como trabalhar com criar alguns jogos simples com o PHP. Hoje vamos entender a diferença entre dois comandos do PHP que confundem bastante quem tá começando break e exit.

Break

O break é um comando usado em loops para literalmente parar a execução do laço. Vamos a um exemplo de loop com while:

<?php

$idade = 10;
$i = 1;

while ($i <= $idade) {
  echo "Sua idade agora é: " . $i . PHP_EOL;
  $i++;
}

echo "### Eu vou ser impresso!";

O código acima imprimirá algo como:

Sua idade agora é: 1
Sua idade agora é: 2
Sua idade agora é: 3
Sua idade agora é: 4
Sua idade agora é: 5
Sua idade agora é: 6
Sua idade agora é: 7
Sua idade agora é: 8
Sua idade agora é: 9
Sua idade agora é: 10
### Eu vou ser impresso!

Até ai nada demais, porém, imagine que você por algum motivo quer parar a execução do Loop quando o valor de $i for 4.

<?php

$idade = 10;
$i = 1;
$limite = 4;

while ($i <= $idade) {
  if ($i == $limite) {
    break;
  }

  echo "Sua idade agora é: " . $i . PHP_EOL;
  $i++;
}

echo "### Eu vou ser impresso!";

O código acima imprimirá algo como:

Sua idade agora é: 1
Sua idade agora é: 2
Sua idade agora é: 3
### Eu vou ser impresso!

Note que o PHP, à cada iteração, faz uma verificação se $i == $limit, para os valores 1, 2 e 3, isso sempre retornava false, porém, no momento em que $i recebeu 4, a condição passou a ser verdadeira, assim, o break foi executado, matando imediatamente a execução do loop, porém tudo que já tinha sido executado até aquele momento não foi alterado.

Note também que a linha echo "### Eu vou ser impresso!", que está fora do Loop, não é afetada pelo break, afinal ela não está dentro do Loop.

Exit ou Die

O PHP possui 2 funções que funcionam da mesma foram. Na verdade uma é apenas um alias para a outra que são as funções exit e die. Diferente do break, essas funções encerram abruptamente a execução do programa inteiro, ou seja, se um arquivo php estiver sendo executado, quando o interpretador php encontrar uma instrução exit ou die, ele vai matar o programa na mesma hora, não importando nada que tiver após essa instrução.

Mesmo exemplo, porém com o exit:

<?php

$idade = 10;
$i = 1;
$limite = 4;

while ($i <= $idade) {
  if ($i == $limite) {
    exit;
  }

  echo "Sua idade agora é: " . $i . PHP_EOL;
  $i++;
}

echo "### Eu vou ser impresso!";

O código acima imprimirá algo como:

Sua idade agora é: 1
Sua idade agora é: 2
Sua idade agora é: 3

Note que agora a linha echo "### Eu vou ser impresso!" não é mais executada, porque agora o programa foi encerrado com um todo e não apenas a execução do Loop.

Bonus!

Tanto a função exit quanto a função die aceitam receber um parâmetro. Se um valor for informado nesse parâmetro, a função exibirá esse valor antes de encerrar o programa.

<?php

$idade = 10;
$i = 1;
$limite = 4;

while ($i <= $idade) {
  if ($i == $limite) {
    exit("Acabou-se o que era doce!!!");
  }

  echo "Sua idade agora é: " . $i . PHP_EOL;
  $i++;
}

echo "### Eu vou ser impresso!";

O código acima imprimirá algo como:

Sua idade agora é: 1
Sua idade agora é: 2
Sua idade agora é: 3
Acabou-se o que era doce!!!

E ai ficou claro agora? Se gostou não esquece de mandar para aquele seu amigo que precisa conhecer essas dicas ;)

Valeu!!!