As linguagens de programação possuem algumas características em comum, dentre elas variáveis (vistas neste post) e estruturas de controle de fluxo. Para que o post não fique muito longo, iremos dividi-lo em duas partes. Neste post veremos estruturas de controle de fluxo condicionais, que são responsáveis pela lógica que utilizaremos em nossos programas, sendo assim são uma parte muito importante da programação.

Estruturas de Controle de Fluxo

Estruturas de controle de fluxo são responsáveis pela forma como o fluxo do programa será executado, ou seja, são nelas que colocamos condições para uma ou outra rotina ser executada, ou rodarmos determinada rotina repetidas vezes dada uma determinada condição de parada, isso permite dinamismo ao programa, sem estruturas de controle não teríamos como controlar a execução de nosso programa de modo a determinar quais ações devem ser executadas em determinados casos, ou ficaria muito complicado representar uma tabela de um banco de dados, por exemplo, sendo assim, uma linguagem depende muito das estruturas de controle.

Controles de Fluxo Condicionais

Os controles de fluxo condicionais são responsáveis pela execução de trechos de código ou rotinas diferentes a depender de condições estabelecidas nas lógicas de negócio dos nossos scripts.

No PHP temos as seguintes estruturas de controle:

  • if, elseif, else
  • switch
  • Operadores ternários

Os quais veremos detalhadamente a seguir.

Estrutura IF

O comando if é utilizado para verificarmos determinada condição e, caso esta condição seja verdadeira, executarmos determinado código, vejamos o exemplo a seguir:

No exemplo acima o comando echo nunca será executado, pois dissemos ao php que ele só deve ser executado caso a condição 1 == 2 (se caso 1 for igual a 2) seja verdadeira. Se fôssemos substituir o comando if por uma palavra de nosso dia a dia, seria a palavra SE, se utilizarmos o exemplo acima, poderíamos dizer o seguinte:

SE um for igual a dois mostre “Tem algo errado aqui!”

A estrutura IF na realidade verifica o tipo de dados booleano, ou seja, ela interpreta se o valor entre parênteses é verdade ou falso (true ou false), para isso podemos fazer uso massivo dos operadores de comparação, e dos operadores lógicos da linguagem, os quais veremos no próximo post da série.

O comando IF pode ser utilizado de três formas distintas:

if (condição) comando único;

 

if (condição) {

Bloco de código

}

 

if (condição):

Bloco de código

endif;

As chaves podem ser omitidas, apesar de não ser recomendável, quando dentro do if só existir um comando a ser executado, por exemplo:

O if utilizando as chaves ( { e } ) é recomendado quando o bloco de códigos pertencente a este IF contiver somente comandos PHP, por exemplo:

O if utilizando “:” e endif; é recomendado para quando dentro do if contiver, além de código PHP, também código HTML, nestes casos os códigos tendem a ficar maiores, e usando esta sintaxe temos uma visibilidade maior de onde começa e onde acaba o bloco IF. Por exemplo:

Se notarmos no exemplo acima, veremos que esse bloco if pode ficar muito grande, utilizando as sintaxe que faz uso do endif;, conseguimos visualizar melhor onde nosso if termina sem confundirmos com as tags html.

Else

Se o IF é o SE, o else é o Senão, ou seja, é a instrução que será executada caso a condição verificada no IF não seja verdadeira, vamos ao exemplo:

No exemplo acima, ao contrário do primeiro, onde não era mostrado nada, neste teríamos a mensagem ‘Tudo certo!’ impressa na tela.

Assim como o IF, o else também pode usar as mesmas sintaxes, obedecendo a mesma forma de trabalho, assim como no IF a omissão das chaves no else com um único comando não é recomendada.

Abaixo um exemplo do else usando a sintaxe do endif;, lembrando que esta sintaxe é utilizada, geralmente, nos casos onde o bloco contém, além de PHP, HTML.

Podemos notar que o else: compartilha o fechamento do IF, ou seja, o endif;, não existindo assim um “endelse;”.

elseif()

O elseif() entra em cena quando necessitamos de uma terceira condição, poderíamos pensar nele como um OU SE, ou seja, caso a condição do IF não seja satisfeita, então podemos especificar uma segunda (terceira, quarta, quinta ou quantas condições forem necessárias) a ser avaliada e um outro bloco de código.

Assim como o if e o else, o elseif também pode utilizar as mesmas sintaxes apresentadas acima, abaixo temos um exemplo do uso dele:

No exemplo acima, a mensagem exibida seria ‘Menor que 5’.

O elseif pode também ser escrito separadamente (else if), apesar de ser recomendado o uso dele sem separação.

O PSR-2 recomenda que funções e parênteses de estruturas de controle devem ser separadas por espaço antes da abertura e após o fechamento do parênteses, e sem espaço para o conteúdo interno, por exemplo:

Maiores informações podem ser encontradas na página oficial do PSR-2, neste link.

IF aninhado

Dizemos que um IF é aninhado quando este está dentro de um bloco de outro IF, vejamos o exemplo abaixo:

Podemos notar no exemplo acima que dentro do IF que tem como condição $nota > 4, outra condição será verificada, se a nota for maior que 6.5 para aprovado, neste caso temos um if aninhado, podemos aninhar quantos ifs forem necessários, porém esta prática não é muito recomendada por aumentar a complexidade do código, quando a quantidade de blocos aninhados está muito grande, talvez seja interessante pensar em uma refatoração do código, para torná-lo mais claro, e mais simples.

Operadores Ternários

Apesar do nome, os operadores ternários são como um tipo de if abreviado, é uma forma compacta de trabalhar com condições, geralmente utilizado para atribuição de valores a variáveis, vejamos um exemplo:

No exemplo acima vemos uma condição seguida de um ponto de interrogação, este símbolo significa que após ele virá o valor (ou ação) que será obtido no caso de a condição ser verdadeira, e após o : virá o valor  (ou ação) quer será obtido no caso de a condição ser falsa. O equivalente ao exemplo acima usando o IF convencional seria:

Assim como no IF, dentro de um operador ternário é possível aninhar outras condições, vejamos no exemplo abaixo:

O exemplo acima seria o equivalente a:

Neste ponto, se fazem necessárias duas observações:

  • Para programadores vindos de algumas outras linguagens, é importante notar que quando aninhamos operadores ternários é necessário envolver os internos com parênteses, se observarmos no exemplo acima, veremos que o operador incluso após os “:” está entre parênteses, isso é uma particularidade da linguagem PHP, caso não o façamos podemos ter resultados inesperados para o operador ternário.
  • Não é recomendável o uso de muitos operadores ternários aninhados, pois isso aumenta a complexidade do código, o recomendável é que se aninhe até 1 ou 2 níveis, no máximo.

Switch Case

Esta estrutura de controle é muito útil quando desejamos realizar várias verificações de igualdade, sua sintaxe é um pouco mais enxuta e simples do que a de vários IFs sucessivos, os quais teriam o mesmo efeito.

Vejamos um exemplo:

Observando a quantidade de ifs acima, podemos notar que o código fica complexo, e cheio de comparações, a situação piora quando temos mais códigos dentro de cada bloco, neste caso podemos utilizar o Switch Case para o mesmo fim, vamos dar uma olhada como ficaria utilizando-o:

Podemos observar que todo o bloco de código fica mais enxuto, mais legível, neste ponto podemos observar também a inclusão de um comando novo no final de cada linha, o comando break.

O comando break impede que o código passe pelos próximos cases da sequência, interrompendo a execução do bloco de código. No manual do PHP podemos ver com mais detalhes o uso do comando break.

É comum entre os programadores não recomendar o uso do comando break fora do escopo de um Switch Case, por adicionar complexidade desnecessária ao código.

Quando usamos switch também podemos avaliar várias situações que possuem o mesmo resultado, sem a necessidade de utilizarmos um código igual para cada case, veja o exemplo:

No exemplo acima o PHP vai interpretar o case 1 e o case 2 para, ai sim, executar a rotina, visto que esta rotina será a mesma para os dois casos, se colocarmos isso dentro de um IF, seria o equivalente a seguinte condição:

if ($cliente->getSituacao() == 1 || $cliente->getSituacao() == 2) {

Podemos ver novamente que a sintaxe se torna mais clara e resumida neste caso.

Estas são as estruturas de controle de fluxo condicionais do PHP, com elas podemos mudar o fluxo de nosso programa, tomando assim as decisões de negócio de seu software.

Para os leitores iniciantes deixo dois desafios até o próximo post da série:

  1. Dado um número atribuído a uma variável verificar se este número é par ou ímpar.
  2. Dado o mesmo número verificar se o mesmo é primo. (lembrando que um número primo é divisível somente por ele mesmo e por 1).

Bom pessoal, ficamos por aqui, as soluções para os desafios estarão no próximo post da séria, se gostaram do post, compartilhem pode ser útil para mais alguém, se acha que faltou algo, deixe nos comentários.

Sobre Rodrigo Teixeira Andreotti

Técnico em Informática formado pela ETE Lauro Gomes
Cursando atualmente o curso de Análise e Desenvolvimento de sistemas.

Atuo como programador PHP há, pelo menos, 6 anos, sendo os dois últimos em empresas e os demais como Freelancer.