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
<?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
?>
▶ Experimente

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
<?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
<?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
💡 Dica: A menos que você tenha um motivo claro para usar == (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
<?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
}
?>
▶ Experimente

4. Operadores lógicos

Usado para combinar várias condições:

PHP
<?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)
?>
⚠️ Atenção: && 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
<?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
<?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"
?>
▶ Experimente
💡 Dica: O operador ternário é ótimo para decisões em uma única linha. Mas nunca aninhe operadores ternários$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
<?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)
💡 Dica: Ao lidar com entradas do usuário, ?? 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
<?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";
}
?>
💡 Dica: Você não precisa memorizar a tabela de precedência dos operadores. Em caso de dúvida, use parênteses. O código é escrito para pessoas; os parênteses deixam sua intenção imediatamente clara.

❓ 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 com strpos() e comparações com false/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

📝 Exercícios

  1. 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).
  2. Use o operador ?? para recuperar com segurança o parâmetro de URL page, 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.
  3. 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.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%