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($$);