PHP do Básico ao Avançado – Aula 4 – Operadores Aritméticos, Lógicos e Comparativos

Tempo de Leitura: 8 Minutos

Nesta quarta aula, vamos falar sobre as estruturas condicionais e os laços, que são as estruturas básicas de controle do fluxo de nossa aplicação, são justamente essas estruturas que permitem que nosso script tome decisões baseado em condições específicas e possa interagir com o usuário, sem essas estruturas, o script seria estático como o próprio contexto do HTML. Vamos apresentar aqui, todas as estruturas e como elas são utilizadas dentro da linguagem.

Uma estrutura condicional, é nada mais nada menos que um bloco de código que é executado se uma determinada condição for atendida, enquanto um laço é uma repetição por um número finito de vezes até que uma determinada situação ou condição seja alcançada. Vamos mostrar exemplos de todas essas formas, e explicar detalhadamente como elas funcionam.

O que são condicionais e como é feita essa avaliação?

Condicionais são fatores, que podem ter determinadas consequências, imagine a seguinte situação condicional que nós analisamos todos os dias antes de sair de casa, o dia que estiver chovendo, utilizamos nosso guarda-chuva isso seria uma condição básica.

Para fazer a avaliação, o computador usa estruturas de lógica booleana, ou seja, ele faz comparações binárias (são chamadas assim pois só podem ter 2 valores de resposta, verdadeiro e falso) e essas combinações podem ser agrupadas criando complexas estruturas de tomada de decisão.

Antes de falar sobre as estruturas condicionais, vamos aprender um pouco sobre como funciona a lógica booleana e como a linguagem PHP entende cada um desses operadores.

Operadores lógicos e Aritméticos

Para execução de cálculos e operações matemáticas, o PHP utiliza alguns operadores, similar a linguagem C estes operadores possuem uma precedência conforme as regras matemáticas, e o uso de parenteses, podem mudar essa precedência.

Os operadores nativos serão explicados aqui, mais a frente, veremos funções que podem ser usadas e que podem agregar outros operadores ou alterar a resposta. Veja os operadores matemáticos (aritméticos) existentes, e como usa-los:

OPERAÇÃO EXPRESSÃO BÁSICA Como usar e retornos
SOMA $a + $b Faz a adição dos valores, conforme seu tipo (int ou float)
SUBTRAÇÃO $a – $b Diferença entre os valores, conforme o tipo (int ou float)
MULTIPLICAÇÃO $a * $b Produto dos valores, conforme o tipo (int ou Float)
DIVISÃO $a / $b Quociente dos valores, podendo ser (int, Float, ERRO) envia um erro em nível ALERT caso seja feita uma divisão por 0
MÓDULO $a % $b Módulo pega o resto da divisão entre os valores.
EXPONENCIAL $a**$b Eleva $a a $b, esse operador foi criado no PHP 5.6
NEGAÇÃO -$a Operador que inverte o valor de $a
IDENTIDADE +$a Operador que converte um valor para INT ou FLOAT conforme seu conteúdo

Além destes, temos o operador de atribuição, representado pelo sinal (=), note que ele NÃO É o operador de comparação de igualdade, pois ele atribui o valor a variável, conforme o exemplo abaixo, temos a impressão do valor 2, já que ele atribui o valor para a variavel $a, que passa a ter o valor correspondente.

<?php
$a=1;
$b=2;
echo $a=$b;
echo '<br>';
echo $a.$b; // vai exibir 22
?>

Um outro operador é o de concatenação, representado pelo sinal (.) ponto, sua função é concatenar variáveis, no formato string, note que não é possível, concatenar valores, se estes forem concatenados, será gerado uma string com os valores literais.

Operadores de Comparação

Permitem que você compare dois valores, respondendo com uma determinada informação verdadeira ou falsa conforme o tipo de operador utilizado, veja a tabela:

OPERADOR EXPRESSÃO BÁSICA Como usar e retornos
IGUALDADE $a == $b Retorna VERDADEIRO se os 2 valores forem iguais. Retorna verdadeiro para $a=1;$b=’1′;
EXATIDÃO $a === $b Retorna verdadeiro, somente se ambos os valores forem iguais e também do mesmo tipo. Retorna falso se tivermos $a=1; $b=’1′;
DIFERENTE $a != $b ou $a <> $b Retorna VERDADEIRO se os valores não forem iguais.
NÃO IDÊNTICO $a !== $b Retorna VERDADEIRO se os valores são diferentes, ou se são de tipos diferentes também.
MENOR $a < $b Retorna VERDADEIRO se o valor de a for menor que o de b, podendo ser usado valores numéricos ou literais
MAIOR $a > $b Retorna VERDADEIRO se o valor de a for maior que o de b, podendo ser usado valores numéricos ou literais
MENOR IGUAL $a <= $b Retorna VERDADEIRO se o valor de a for menor ou igual ao de b, podendo ser usado valores numéricos ou literais
MAIOR IGUAL $a >= $b Retorna VERDADEIRO se o valor de a for maior ou igual ao de b, podendo ser usado valores numéricos ou literais
SPACESHIP $a <=> $b Retorna um valor numérico, referente a diferença dos valores, onde o valor retornado é menor que, igual a ou maior que zero quando $a é, respectivamente, menor que, igual a ou maior que $b.

echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

Este operador foi introduzido no PHP 7

Se comparar um número com uma string ou com strings numéricas, cada string é convertido para um número e então a comparação é realizada numericamente. As conversões de tipo não são realizadas quando a comparação utilizada é === ou !== por esse tipo de comparação envolver valores e tipos.

Realizar comparações de números de ponto flutuante com igualdade pode causar erros de avaliação, por causa da maneira como são representados internamente. Entretanto existem maneiras de fazer comparações com números de ponto flutuante que contornam essas limitações, utilizando-se um cálculo de precisão, como o código abaixo:

<?php
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;

if(abs($a-$b) < $epsilon) {
    echo "iguais";
}
?>

Este código retorna como VERDADEIRO, pois considera-se uma comparação de até 5 casas decimais. Em outras aulas futuras, vamos ter exemplos e outras operações específicas com números de ponto flutuante.

Operadores de Controle

Note que o PHP possui um operador de controle de erro (@) onde qualquer mensagem de erro gerada naquela expressão seja suprimida, por exemplo, @$a= 2/0; vai salvar um erro e disparar uma chamada para a função interna error_reporting(); porém, as mensagens serão suprimidas da saída padrão.

Este operador só funciona com expressões, ou seja, você pode coloca-lo em uma chamada como: @echo($a); e se a variável não existir, a mensagem de aviso do PHP não será impressa.

Um detalhe, é que se você colocar essa supressão, e um erro crítico ocorrer, o script vai ser interrompido, e simplesmente não vai devolver nenhum feedback de o porque. O operador @ define temporariamente o nível de relatório de erros como 0 para essa linha, ou expressão. Se essa linha disparar um erro, o manipulador de erros ainda será chamado, mas será chamado com um nível de erro de 0 e nada será impresso.

@include(“file.php”); 

Caso o arquivo não exista, ou algum erro aconteça em sua execução, esse erro também será suprimido, ou seja, toda a execução do script terá os erros definidos como 0. A supressão de erros deve ser evitada sempre que possível, pois não apenas suprime o erro que você está tentando parar, mas também suprime erros que você não previu que ocorreriam. Isso tornará a depuração um pesadelo. É muito melhor testar a condição que você sabe que causará um erro antes de executar o código. Dessa forma, apenas o erro que você conhece será suprimido e nem todos os erros futuros associados a esse trecho de código. Este é um dos motivos que não estamos dando muitos exemplos de como ele pode ser usado.

Um outro problema no uso de @ é que dependendo do número de ciclos e iterações, você pode facilmente sobrecarregar a execução, devido ao fato de este manipulador gerar um grande consumo de memória, e mesmo de recursos de processamento para ser executado. Em outros momentos, vamos falar especificamente sobre benchmarks e performance, bem como melhores maneiras de tratar exceções e erros.

Operadores Lógicos

Comparam de maneira lógica, se valores de expressões são verdadeiras ou falsas conforme a tabela a seguir

OPERADOR EXPRESSÃO BÁSICA Como usar e retornos
and $a and $b Retorna VERDADEIRO se os 2 valores forem verdadeiros
or $a or $b Retorna verdadeiro se ao menos 1 dessas condições for verdadeira ou ambas
xor $a xor $b Retorna verdadeiro se 1 dessas condições for verdadeira, porém não se ambas forem
! (negação) !$a Ele é um operador unário, que inverte a expressão, ou seja, se ela é verdadeira ele retorna falso, se é falso, retorna verdadeiro
&& $a && $b Similar ao and, porém com uma precedência maior
|| $a || $b Similar ao or, porém com precedência maior

Precedência

Note, que o PHP assim como na matemática e em outras linguagens possui uma ordem para avaliar um grupo de expressões, ao que se dá o nome de precedência. As regras são as mesmas da matemática, e os operadores podem sofrer uma alteração de precedência pelo uso dos parênteses ( e ) onde as expressões mais internas são avaliadas primeiro, e depois as mais externas. Quando mais de 2 operadores estão juntos, as precedências matemáticas prevalecem.

Conclusão

Note, que os operadores como um grupo geral, são uma das partes mais importantes no aprendizado de uma linguagem específica como o PHP e também na programação de computadores em geral, pois são a base para que o seu software possa tomar decisões e realizar comparações afim de poder tomar uma decisão no processamento.

Na próxima aula, vamos estudar as estruturas condicionais, que são as ferramentas pela qual a linguagem permite o controle do fluxo de processamento, e dando interatividade ao script permitindo que um determinado caminho ou resposta seja diferente conforme o resultado da avaliação de uma condição; por este motivo, entender bem como utilizar os operadores vai a partir deste ponto ajudar muito na compreensão dos demais conteúdos.