Menu

Operadores PHP: aritméticos, lógicos, de string e mais

Os operadores PHP trabalham com valores: +, -, *, /, %, ** para aritmética, =, +=, .=, ??= para atribuição, &&, ||, ! e xor para lógica, . para juntar strings, ==, ===, <=> para comparação e ++, -- para incrementar. Veja cada grupo com exemplos executáveis, mais a armadilha de precedência entre and e &&.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Um operador recebe um ou mais valores e produz um novo: $a + $b soma, $a . $b junta strings, $a && $b é um E lógico, $a === $b compara, $i++ incrementa.

/ retorna um float, a menos que dois inteiros se dividam exatamente: 17 / 5 é 3.4, 10 / 5 é o inteiro 2. Quando você quer só a parte inteira, use intdiv(). Arredondamento é explicado na página de matemática.

Operadores aritméticos

OperadorNomeExemploResultado
+Adição7 + 29
-Subtração7 - 25
*Multiplicação7 * 214
/Divisão7 / 23.5
%Módulo (resto)7 % 21
**Potência7 ** 249
-$aNegação-7-7

O módulo é útil para "a cada N itens" e para verificar par ou ímpar. O resultado tem o sinal do lado esquerdo, e dividir por zero lança um erro que você pode capturar:

Operadores de atribuição

= guarda um valor. Cada operador aritmético e de string tem uma forma combinada que atualiza a variável no lugar.

??= faz parte da família do operador de coalescência nula. Ele só atribui quando a variável não está definida ou é null.

Incremento e decremento: ++ e --

$i++ retorna o valor atual e depois soma 1. ++$i soma 1 e depois retorna o novo valor. A diferença só aparece quando você usa o resultado na mesma expressão.

O truque com letras é como muitas vezes se geram nomes de colunas de planilha (A, B, ... Z, AA).

Operadores lógicos: &&, ||, ! e xor

OperadorVerdadeiro quando
$a && $bos dois são verdadeiros
$a || $bpelo menos um é verdadeiro
!$a$a é falso
$a xor $bexatamente um é verdadeiro
$a and $b, $a or $bo mesmo que && e ||, com precedência menor

&& e || fazem curto-circuito: o lado direito não é avaliado quando o lado esquerdo já decide o resultado. É isso que torna isset($user) && $user->isAdmin() seguro.

and ou &&: a armadilha da precedência

and e or têm ligação mais fraca que =, então numa atribuição eles são aplicados depois que o valor é guardado. Este é um bug clássico:

A precedência baixa é útil num idioma, $file = fopen($path, 'r') or die('Cannot open');, em que você quer que a atribuição aconteça primeiro. Em todo o resto, use && e ||.

Operadores de string: . e .=

O PHP tem dois operadores de string: . junta duas strings ("Grace" . " " . "Hopper") e .= acrescenta a uma variável ($html .= "<li>"). + nunca junta strings: "3" + "4" é o número 7, enquanto "3" . "4" é a string "34". A página sobre strings explica interpolação e aspas.

Comparação e o operador spaceship <=>

== compara depois de converter os tipos, === também verifica o tipo, e <=> retorna -1, 0 ou 1, exatamente o que callbacks de ordenação precisam. Os detalhes e a tabela completa de comparação frouxa estão na página sobre operadores de comparação.

Operadores de array

+ em arrays é uma união: as chaves do array da esquerda vencem e só as chaves ausentes são adicionadas a partir da direita. Isso surpreende quem espera que ele acrescente no fim. == verifica os mesmos pares chave/valor, === também exige a mesma ordem e os mesmos tipos.

Para acrescentar uma lista a outra, use array_merge() ou a sintaxe spread [...$a, ...$b].

Precedência de operadores

Quando uma expressão mistura operadores, o PHP os aplica numa ordem fixa. Os que mais confundem, com o que o PHP 8.3 imprime:

echo 2 + 3 * 4;        // 14: * before +
echo (2 + 3) * 4;      // 20
echo 2 ** 3 ** 2;      // 512: right to left, 2 ** 9
echo -2 ** 2;          // -4: ** before unary minus
echo "Sum: " . 2 + 3;  // Sum: 5, since PHP 8 + runs before .

Na dúvida, adicione parênteses. Eles não custam nada, e quem ler a linha depois não precisa lembrar da tabela.

Perguntas frequentes

Qual a diferença entre and e && no PHP?

Os dois são E lógico, mas and tem precedência menor que =. Então $x = true and false; guarda true em $x (a atribuição acontece primeiro), enquanto $x = true && false; guarda false. Use && e || em expressões e deixe and/or fora das atribuições.

O que faz o % no PHP?

% é o operador de módulo: ele retorna o resto de uma divisão inteira, então 10 % 3 é 1. O resultado tem o sinal do operando da esquerda (-7 % 3 é -1). Para floats use fmod(), e % 0 lança um DivisionByZeroError.

Como elevo um número a uma potência no PHP?

Use o operador **: 2 ** 10 é 1024. Ele é associativo à direita, então 2 ** 3 ** 2 é 2 ** 9 = 512, e tem prioridade sobre o menos unário, então -2 ** 2 é -4. A função pow(2, 10) faz o mesmo.

Qual a diferença entre $i++ e ++$i no PHP?

Os dois somam 1 a $i. $i++ (pós-incremento) retorna o valor antigo e depois incrementa; ++$i (pré-incremento) incrementa primeiro e retorna o novo valor. Numa linha sozinha, como o passo de um loop for, não há diferença.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR