Operadores
Os operadores são os elementos básicos de uma linguagem de programação — você os utiliza em combinação com variáveis e valores para realizar cálculos e tomar decisões. Os operadores do PHP são variados, intuitivos e muitos deles se inspiram diretamente em símbolos matemáticos.
1. Operadores aritméticos
▶ Exemplo: Todos os operadores aritméticos
<?php
$a = 10;
$b = 3;
echo $a + $b; // 13 Addition
echo $a - $b; // 7 Subtraction
echo $a * $b; // 30 Multiplication
echo $a / $b; // 3.333... Division (note: PHP division always returns a float)
echo $a % $b; // 1 Modulus (remainder)
echo $a ** $b; // 1000 Exponentiation (PHP 5.6+, 10 to the power of 3)
// Negation
echo -$a; // -10 Negation
?>
2. Operadores de atribuição
A atribuição básica = é simples. O que realmente economiza tempo são os operadores de atribuição combinada:
<?php
$x = 10;
$x += 5; // $x = $x + 5; → 15
$x -= 3; // $x = $x - 3; → 12
$x *= 2; // $x = $x * 2; → 24
$x /= 4; // $x = $x / 4; → 6
$x %= 4; // $x = $x % 4; → 2
$x .= " yuan"; // $x = $x . " yuan"; → "2 yuan" (string append assignment)
?>
3. Operadores de comparação
Usado para comparar dois valores; o resultado é true ou false:
<?php
$a = 5;
$b = "5";
// Loose comparison (== compares value only, auto-converts types)
var_dump($a == $b); // bool(true) — 5 equals "5"
var_dump($a != $b); // bool(false)
// Strict comparison (=== compares both value and type)
var_dump($a === $b); // bool(false) — 5 doesn't equal "5" (different types)
var_dump($a !== $b); // bool(true)
// Greater / less than
var_dump($a > 3); // bool(true)
var_dump($a >= 5); // bool(true)
var_dump($a < 10); // bool(true)
var_dump($a <= 5); // bool(true)
// Spaceship operator (PHP 7+) <=>
// Returns -1 if left is smaller, 0 if equal, 1 if left is larger
echo 1 <=> 2; // -1
echo 2 <=> 2; // 0
echo 3 <=> 2; // 1
// Commonly used in sorting callbacks
?>
(1) == x === – Guia de decisão
| Cenário | Uso | Motivo |
|---|---|---|
| Validação de entradas em formulários | === |
A entrada do usuário "0" pode ser interpretada incorretamente por == |
| Comparando valores de retorno de bancos de dados | === |
Os bancos de dados podem retornar números como strings |
| Comparação com constantes | === |
Comparação precisa |
Verificando o valor de retorno de strpos() |
!== false |
O valor 0 seria interpretado incorretamente por == false |
| Comparação numérica simples (ambos os lados são definitivamente números) | == |
Funciona, mas === também não faz mal |
== (comparação fraca), use === por padrão (comparação estrita). Isso evita inúmeros bugs causados por conversão implícita de tipos.
▶ Exemplo: Comparação estrita na prática
<?php
// In a search engine, a user might enter "0"
$search = "0";
// ❌ Wrong approach
if ($search == false) {
echo "You didn't enter a search term"; // This runs! Because "0" == false
}
// ✅ Correct approach
if ($search === "") {
echo "You didn't enter a search term"; // "0" !== "", won't misjudge
}
?>
4. Operadores lógicos
Usado para combinar várias condições:
<?php
$age = 20;
$hasTicket = true;
// AND (both must be true)
var_dump($age >= 18 && $hasTicket); // bool(true)
var_dump($age >= 18 and $hasTicket); // bool(true) — lower precedence than &&
// OR (at least one must be true)
var_dump($age < 18 || $hasTicket); // bool(true) — has a ticket, so can enter
var_dump($age < 18 or $hasTicket); // bool(true) — lower precedence than ||
// NOT (negation)
var_dump(!$hasTicket); // bool(false)
var_dump(!false); // bool(true)
// XOR (true when the two are different)
var_dump(true xor false); // bool(true)
var_dump(true xor true); // bool(false)
?>
&& e and se comportam de maneira diferente! $a = true && false; resulta em false (&& tem precedência maior do que =), enquanto $a = true and false; resulta em true (= tem precedência maior do que and). Sempre use && e ||, e não and e or.
5. Operadores de cadeia de caracteres
O PHP possui apenas dois operadores de string:
| Operador | Ação | Exemplo | Resultado |
|---|---|---|---|
. |
Concatenar | "Hello" . " PHP" |
"Olá, PHP" |
.= |
Acrescentar | $s = "A"; $s .= "B"; |
$s = "AB" |
<?php
$name = "John";
echo "Hello, " . $name . "!"; // Hello, John!
$html = "<div>";
$html .= "<h1>Title</h1>";
$html .= "<p>Content</p>";
$html .= "</div>";
echo $html;
// <div><h1>Title</h1><p>Content</p></div>
?>
6. Operador ternário (?:)
O operador ternário é uma forma abreviada de if...else:
▶ Exemplo: Comparação entre a operação ternária e a coalescência nula
<?php
$age = 20;
// Format: condition ? value_if_true : value_if_false
$status = ($age >= 18) ? "Adult" : "Minor";
echo $status; // Adult
// The above is equivalent to:
if ($age >= 18) {
$status = "Adult";
} else {
$status = "Minor";
}
// PHP 5.3+ shorthand (omit the middle part)
$username = $_GET['name'] ?: "Guest";
// Equivalent to: use $_GET['name'] if it's truthy, otherwise "Guest"
?>
$a ? $b ? $c : $d : $e fica completamente ilegível.
7. Operador de coalescência nula (??)
Esse é um dos recursos mais práticos introduzidos no PHP 7:
<?php
// ?? operator: use the left side if it's not null, otherwise use the right side
$username = $_GET['user'] ?? "Anonymous";
// Equivalent to: isset($_GET['user']) ? $_GET['user'] : "Anonymous"
// ??= operator (PHP 7.4+): assign only if the left side is null
$config = null;
$config ??= "default"; // $config is now "default"
$config2 = "existing value";
$config2 ??= "default"; // $config2 is still "existing value" (not null, so no overwrite)
// The difference between ?? and ?:
$name = "";
echo $name ?: "default"; // "default" (empty string is falsy)
echo $name ?? "default"; // "" (empty string is not null)
?>
| Operador | Lógica | Como "" é tratado |
|---|---|---|
?: |
Use o lado direito se o esquerdo for falso | "" → use o lado direito |
?? |
Use o lado direito se o lado esquerdo for nulo ou indefinido | "" → use o lado esquerdo ("" não é nulo) |
?? costuma ser mais seguro do que ?:, pois o usuário pode inserir intencionalmente uma string vazia "", que é uma entrada válida.
8. Precedência dos operadores
Quando uma expressão contém vários operadores, o PHP usa a precedência para decidir qual deles deve ser avaliado primeiro:
| Precedência | Operadores |
|---|---|
| Alto | ** (elevação a uma potência) |
!, ~, ++, -- |
|
*, /, % |
|
+, -, . |
|
<, <=, >, >= |
|
==, !=, ===, !== |
|
&& |
|
| ` | |
?? |
|
?: (ternário) |
|
| Baixo | =, +=, .= , etc. |
<?php
// Don't memorize the table — use parentheses to clarify intent
$result = $a + $b * $c; // Unclear
$result = $a + ($b * $c); // Clear
// Same for complex conditions
if (($age >= 18 && $hasTicket) || $isVip) {
echo "Entry allowed";
}
?>
❓ Perguntas Frequentes
P: Quando exatamente devo usar
==em vez de===? R: Use===por padrão. Use==somente quando realmente precisar de coerção automática de tipos (por exemplo, ao comparar números de fontes diferentes). Para verificações comstrpos()e comparações comfalse/null, você deve usar===.
P: Como faço para escolher entre
??e?:? R: Use??ao extrair valores de GET/POST (o usuário pode nem enviar o parâmetro). Use?:quando for importante saber se uma variável tem “conteúdo real” (uma string vazia é considerada como ausência de conteúdo). Use??também para verificações de existência de chaves em arrays.
P: Por que
1 + "10 cats"resulta em 11 e não em 1? R: Quando o PHP converte uma string em um número, ele lê desde o início até encontrar o primeiro caractere não numérico."10 cats"começa com"10", então é convertido para 10. Se a string começar com um caractere não numérico (por exemplo,"cats 10"), ela é convertida para 0.
📖 Resumo
- Use
.para concatenar cadeias de caracteres e.=para anexar (não+) ===realiza uma comparação estrita (valor e tipo) — é preferível usá-la por padrão- O operador
<=>retorna -1/0/1 — perfeito para ordenação &&tem precedência maior do queand— use apenas&&e||??verifica se o valor é nulo ou indefinido;?:verifica se o valor é falso — prefira??para entradas do usuário- Quando não tiver certeza sobre a ordem de prioridade, use parênteses; a clareza é mais importante do que a concisão
📝 Exercícios
- Crie duas variáveis que representem a idade e o status de associado de um usuário e, em seguida, use operadores lógicos para determinar se ele pode entrar (idade ≥ 18 OU é associado).
- Use o operador
??para recuperar com segurança o parâmetro de URLpage, cujo valor padrão é 1; em seguida, use o operador ternário para exibir “Página inicial” se a página for ≤ 1, ou “Página N” caso contrário. - Elabore um exercício com operadores combinados: dados o preço de um produto e a taxa de desconto, calcule o preço com desconto e formate o resultado com duas casas decimais.



