Pular para o conteúdo principal

Guia de Abreviações em PHP: Operadores de Coalescência e Ternários

Guia de Abreviações em PHP: Operadores de Coalescência e Ternários - Publicado por: Wellington Pragidi Desenvolvedor Web

Neste guia, vamos explorar técnicas para encurtar verificações comuns em PHP, tornando o código mais limpo e eficiente.

 

1. Operador Ternário (? :)

Verifica uma condição e retorna um valor se for true ou outro se for false.

Sintaxe Básica

$var = condicao ? valor_se_verdadeiro : valor_se_falso;

Exemplo Prático

// Forma tradicional
if( isset($dados["nome"]) ) {
    $nome = $dados["nome"];
} 
else {
    $nome = "Anonimo";
}

// Forma abreviada (ternário)
$nome = isset( $dados["nome"] ) ? $dados["nome"] : "Anonimo";


2. Operador de Coalescência Nula (??) (PHP 7+)

Retorna o primeiro valor definido (não nulo) entre os dois fornecidos.

Sintaxe Básica

$var = $valor1 ?? $valor2;

Exemplo Prático

// Verifica se existe, senão usa um valor padrão
$email = $_POST["email"] ?? "sem@email.com";

// Equivalente a:
$email = isset( $_POST["email"] ) ? $_POST["email"] : "sem@email.com";


3. Operador de Coalescência Nula com Encadeamento (??) (PHP 7+)

Permite verificar múltiplos valores até achar um que exista.

Sintaxe Básica

$var = $valor1 ?? $valor2 ?? $valor3 ?? $padrao;

Exemplo Prático

// Verifica em ordem: $_GET["id"], $_POST["id"], ou usa 0
$id = $_GET["id"] ?? $_POST["id"] ?? 0;

 

4. Operador Ternário com null (?:) (PHP 5.3+)

Retorna o primeiro valor que não seja considerado false (equivalente a ??, mas avalia falsy values).

Sintaxe Básica

$var = $valor ?: $padrao;

Exemplo Prático

// Se $color for falsy (null, "", 0, false), usa "azul"
$color = $cor_favorita ?: "blue";


5. Verificações Comuns Abreviadas (bônus)

Verificar e decodificar JSON

// Antes:
$json = isset( $dados["config"] ) ? json_decode($dados["config"]) : null;

// Depois (PHP 7+):
$json = json_decode( $dados["config"] ?? '' );

 

Definir array vazio se não existir

$lista = $dados["itens"] ?? [];

 

Retornar o primeiro valor válido

$username = $_GET["user"] ?? $_SESSION["user"] ?? "visitante";

 

6. Quando Usar Cada Abreviação?

Operador Melhor Uso PHP
? : Verificações complexas (condicionais) 5+
?? Verificar isset + null 7+
?: Verificar valores falsy (null, "", 0) 5.3+
 
Notas.
  • Prefira ?? em PHP 7+ (mais legível e seguro).
  • Use ternários (? :) para lógicas mais complexas.
  • Evite abreviações se prejudicar a legibilidade.

 

 

Incremento ao Guia de Abreviações em PHP

 

Operador ??= (Atribuição Condicional) – PHP 7.4+

Atribui um valor a uma variável apenas se ela não estiver definida ou for null.

Sintaxe:

$var ??= $valor_padrao;

Exemplo:

$nome = null;
$nome ??= "Visitante"; // Atribui "Visitante" só se $nome for null

echo $nome; // Saída: "Visitante"

Equivalente a:

if( ! isset($nome) || $nome === null ) {
    $nome = $valor_padrao;
}

Exemplo adicional:

$connection ??= new Connection;
// se já existir uma conexão aberta anteriormente usa ele sem nova instancia, senão cria nova instancia Connection


2. Operador isset() com Coalescência (Não Existe, mas vamos Simular)

// Isso NÃO funciona no PHP:
$valor = isset( $var ?? $padrao ); // X Erro de sintaxe

Alternativa Correta abreviada

// use assim para encurtar o isset
$valor = $var ?? $padrao; // Usa $var se existir, senão $padrao

// e assim para empty
$valor = $var ?: $padrao; // Se $var for "empty" (falsey), usa $padrao

Observação: Fiz essa simulação pois já me perguntaram sobre fazer isso assim como uso no json_decode()

 

3. Novos Operadores no PHP 8+

Operador match() (PHP 8.0+)
Uma versão mais poderosa do switch, que retorna valores e tem comparação estrita (===).

Sintaxe:

$resultado = match( $var ) {
    valor1  => retorno1,
    valor2  => retorno2,
    default => retorno_padrao
};

Exemplo:

$status = 200;
$mensagem = match( $status ) {
    200 => "OK",
    404 => "Página não encontrada",
    500 => "Erro interno",
    default => "Status desconhecido"
};

echo $mensagem; // Saída: "OK"

 

Vantagens:
✔ Mais limpo que switch
✔ Retorna valores (pode ser usado em atribuições)
✔ Comparação estrita (evita bugs)
✔ E na maioria dos casos match é mais rápido que switch

 

Operador ?-> (Nullsafe Operator) – PHP 8.0+

Acessa propriedades/métodos de um objeto apenas se ele não for null.

Sintaxe:

$resultado = $objeto?->propriedade?->metodo();

Exemplo:

$user = getUser(); // Pode retornar null

// Antes (PHP < 8):
$nome = $user ? $user->name : null;

// Agora (PHP 8+):
$nome = $user?->name; // Retorna null se $user for null


Operador |> (Pipe) – PHP 8.1+ (Proposta, ainda não implementado)

(Atenção: Isso ainda não existe no PHP, mas está em discussão!)

Permite encadear operações em uma sequência (estilo JavaScript ou Laravel).

Exemplo Teórico:

$resultado = $valor |> funcao1($$) |> funcao2($$);
Categoria: PHP