Trabalhando com operadores no PHP

Operadores são utilizados para realizar operações em um ou mais operandos, na maioria dos casos os operadores são binários(utilizados com dois operandos), retornando um valor final, certos operadores possuem prioridade sobre outros, por exemplo, ao utilizar na mesma sequência de cálculos, uma soma seguida por uma multiplicação, $a = 2 + 2 * 3, primeiro será realizado o cálculo da multiplicação, para depois efetuar a soma, chamamos isso de precedência de operadores, mas podemos priorizar uma determinada operação utilizando parenteses, por exemplo: $a = (2 + 2)  * 3, nesse caso primeiro será realizado a soma para depois efetuar a multiplicação.

No PHP os operadores são dividos em algumas categorias:

  • Operadores aritméticos
  • Operadores de incremento/decremento
  • Operadores lógicos
  • Operadores de comparação
  • Operadores de array
  • Operadores de string
  • Operadores de atribuição
  • Operador de controle de erro
  • Operador de execução
  • Operador de tipo
  • Operadores bitwise

Seguiremos a ordem da lista acima e daremos foco aos operadores mais utilizados, não iremos estudar os operadores bitwise, devido a sua complexidade, deixaremos para outro artigo.

Operadores aritméticos

Através dos operadores aritméticos podemos realizar as operações matemáticas básicas, como adição, subtração, multiplicação e divisão, confira na tabela abaixo:

Exemplo Nome Resultado
-$a Negação Oposto de $a.
$a + $b Adição Soma de $a e $b.
$a – $b Subtração Diferença entre $a e $b.
$a * $b Multiplicação Produto de $a e $b.
$a / $b Divisão Quociente de $a por $b.
$a % $b Módulo Resto de $a dividido por $b.
<?php
$a = 2;
$b = 5;

$negacao = -$a;
// Resultado: -2

$adicao = $a + $b;
// Resultado: 7

$subtracao = $b - $a;
// Resultado: 3

$multiplicacao = $b * $a;
// Resultado: 10

$divisao = $b / $a;
// Resultado: 2.5

$modulo = $b % $a;
// Resultado: 1
?>

Operandos de módulo são convertidos para inteiros (removendo a parte decimal) antes de processar, sendo assim, 90.75 % 1 = 0.

Operadores de incremento/decremento

PHP oferece operadores de incremento(++) e decremento(–), parecidos com os que são utilizados na linguagem C, esses operadores tem como objetivo respectivamente somar um(+1) e subtrair um(-1), confira na tabela abaixo:

Exemplo Nome Efeito
++$a Pré-incremento Incrementa $a em um, retorna $a.
$a++ Pós-incremento Retorna $a, depois incrementa em um.
–$a Pré-decremento Decrementa $a em um, retorna $a.
$a– Pós-decremento Retorna $a, depois decrementa em um.

Como podemos perceber na tabela, a posição em que estes operadores são colocados(antes ou após o operando) faz diferença em alguns casos, principalmente quando utilizados para retornar um valor em funções, veja o exemplo abaixo:

<?php
$a = 2;

$pre_incremento = ++$a;
// Resultado: $pre_incremento = 3, $a = 3
$pos_incremento = $a++;
// Resultado: $pos_incremento = 3, $a = 4

$pre_decremento = --$a;
// Resultado: $pre_decremento = 3, $a = 3
$pos_decremento = $a--;
// Resultado: $pos_decremento = 3, $a = 2
?>

Curiosidades sobre os operadores de incremento/decremento:

  • Não faz efeito em valores booleanos
  • Somente o operador de incremento faz efeito em valores NULL ou letras
  • Ao utilizar o operador de incremento em letras, o valor retornado segue a ordem do alfabeto
  • Após a letra Z vem AA

Operadores lógicos

Os operadores lógicos são utilizados para conectar dois valores booleans e obter um terceiro valor boolean dependendo dos dois primeiros. Existem 4 operadores lógicos no PHP, onde três são binários(utilizam dois operandos) e apenas um é unário(utiliza apenas um operando), que é o operador lógico NOT, identificado por um simples ponto de exclamação( ! ) precendendo o operando.

Exemplo Nome Resultado
$a and $b E true se $a e $b são true.
$a or $b OU true se $a ou $b são true.
$a xor $b XOR true se $a ou $b forem true, mas não os dois.
!$a NÃO true se $a é false.
$a && $b E true se $a e $b são true.
$a || $b OU true se $a ou $b são true.

É importante entender que todos operadores lógicos só funcionam com valores do tipo boolean, caso seja passado um valor de outro tipo(o que é comum) o PHP irá converter esse valor para boolean antes de realizar qualquer operação, logo é importante dominar os tipos de dados no php.

O PHP utiliza uma estratégia muito simples ao utilizar o operador lógico AND, sempre que o operando esquerdo, que pode ser um valor ou expressão retornar false, a operação irá retornar false imediatamente, pois independente do valor do operando direito está operação será false, isso é de grande valor para construir boas estruturas lógicas, já que em muitos casos o operando direito depende do operando esquerdo, logo não faz sentido iniciar a avaliação do mesmo.

A razão para as duas variantes dos operandos AND e OR é que eles operam com precedências diferentes.

Operadores de comparação

Os operadores de comparação são utilizados para comparar dois valores, onde podemos verificar se um valor é igual à outro, maior, menor, etc. É interessante dar uma olhada na tabela de comparação de tipos no php, para evitar possíveis erros ou pegadinhas caso você esteja estudando para prova de certificação.

Exemplo Nome Resultado
$a == $b Igual true se $a é igual a $b.
$a === $b Idêntico true se $a é igual a $b e são do mesmo tipo.
$a != $b Diferente true se $a não é igual a $b.
$a <> $b Diferente true se $a não é igual a $b.
$a !== $b Não idêntico true se $a não é igual a $b e/ou não são do mesmo tipo.
$a < $b Menor que true se $a é menor que $b.
$a > $b Maior que true se $a é maior que $b.
$a <= $b Menor ou igual true se $a é menor ou igual a $b.
$a >= $b Maior ou igual true se $a é maior ou igual a $b.

Se você comparar um inteiro com uma string, a string será convertida para um valor numérico. Se você comparar 2 strings numéricas, elas serão comparadas como inteiras.

Operadores de array

Alguns dos operadores apresentados anteriormente funcionam de outra maneira quando aplicados em arrays, por isso é importante tomar cuidado, confira os operadores de array.

Exemplo Nome Resultado
$a + $b União União de $a e $b.
$a == $b Igualdade true se $a e $b tem os mesmos pares de chave/valor.
$a === $b Identidade true se $a e $b tiverem pares de chave/valor, ordem e tipo iguais.
$a != $b Desigualdade true se $a não é igual a $b.
$a <> $b Desigualdade true se $a não é igual a $b.
$a !== $b Não identidade true se $a não é identico a $b.

O operador de união ( + ) acrescenta os elementos do array a direita no array da esquerda, contudo, chaves duplicadas NÃO são sobrescritas.

Operadores de string

O PHP oferece dois operadores para trabalhar com strings, o primeiro e mais simples é o operador de concatenação ( . ), isso mesmo trata-se de um ponto. Este operador tem como objetivo unir(concatenar) o operando da esquerda com o operando da direita.

<?php
echo 'Hello ' . 'World';
// Resultado: Hello World

echo 1 . 2;
// Resultado: 12
// PHP identifica os espaços entre os números e os converte para string

echo 1.2;
// Resultado: 1.2
// PHP identifica como um número real
?>

O segundo operador de strings é a combinação do operador de concatenação com o operador de atribuição, formando o operador ( .= ), que retorna o valor do operando da esquerda concatenado com o operando da direita, atribuindo o resultado no operando da esquerda, que normalmente é uma variável.

Operadores de atribuição

O operador mais básico de atribuição é utilizado com o sinal de igual ( = ), que apesar de utilizar este sinal, não significa uma comparação, este operador indica que o operando da esquerda, normalmente uma variável, recebe o valor do operando da direita, que pode ser um valor único, uma expressão, etc.

<?php
$a = 2;
$b = 'Diogo';
$c = array('preto', 'branco');
?>

Além do operador básico de atribuição, podemos realizar combinações com alguns operadores apresentados anteriormente, confira na tabela:

Operador Nome Exemplo Equivalente
+= Atribuição e adição $a += $b $a = $a + $b
-= Atribuição e subtração $a -= $b $a = $a – $b
*= Atribuição e multiplicação $a *= $b $a = $a * $b
/= Atribuição e divisão $a /= $b $a = $a / $b
%= Atribuição e módulo $a %= $b $a = $a % $b
.= Atribuição e concatenação $a .= $b $a = $a . $b

Operador de controle de erro

PHP oferece o operador ( @ ), isso mesmo o arroba, que é utilizado para ignorar mensagens de erro de uma determinada expressão, sua funcionalidade ocorre quando o operador precede uma expressão, deixando claro que não queremos mensagens de erros que possam ocorrer nessa expressão.

<?php
@include("file.php");
?>

No exemplo acima, importamos o arquivo file.php utilizando a função include, que lança uma mensagem de warning se o arquivo não existir, nesse caso como utilizamos o operador de controle de erro, mesmo que o arquivo não exista, não será lançado nenhuma mensagem.

Caso o recurso track_errors estiver habilitado, qualquer mensagem de erro gerada pela expressão será gravada na variável $php_errormsg. Esta variável será sobrescrita a cada erro, assim verifique-a constantemente se você quiser usá-la.

Operador de execução

O operador de execução ( `comando` ) possibilita executar comandos no servidor e retorna sua saída como uma string, sua funcionalidade é parecida com a função shell_exec(), porem em formato de operador.

<?php
// Linux $output = `ls -al`;
echo $output;

// Windows $output = `dir`;
echo $output;
?>

Os comandos vão variar dependendo do sistema operacional do servidor, no exemplo acima o resultado será uma listagem de diretórios.

O operador de execução fica desabilitado quando o safe mode(modo de segurança) está ativado ou shell_exec() está desabilitado.

Operador de tipo

PHP oferece um operador de tipo, instanceof, este operador é utilizado para verificar se uma variável é um objeto instânciado de uma determinada classe.

<?php
class Pessoa {}
class Animal {}

$a = new Pessoa();

var_dump($a instanceof Pessoa);
// Resultado: true
var_dump($a instanceof Animal);
// Resultado: false
?>

O operador instanceof também pode ser utilizado para verificar se uma variável é um objeto instânciado de uma classe que herda de uma classe pai ou se uma variável é um objeto instânciado de uma classe que implementa determinada interface.

<?php
interface Pessoa {}
class Diogo implements Pessoa {}

class Animal {}
class Cachorro extends Animal {}

$a = new Diogo();
$b = new Cachorro();

var_dump($a instanceof Pessoa);
// Resultado: true
var_dump($b instanceof Animal);
// Resultado: true
?>

Deixe uma resposta

O seu endereço de e-mail não será publicado.. Campos obrigatórios são marcados com *