W3docs

empty()

A função empty() do PHP verifica se uma variável está vazia — sem valor, null, false, 0 ou string vazia.

Introdução

empty() é uma construção de linguagem PHP embutida que indica se uma variável está "vazia" — ou seja, se ela não contém nenhum valor significativo. É mais comumente usada para proteger contra campos de formulário ausentes, chaves de array inexistentes e variáveis não inicializadas antes que o código tente utilizá-las.

O ponto fundamental a entender é que empty($var) é essencialmente uma abreviação de !isset($var) || $var == false. Em outras palavras, uma variável está vazia quando ela não existe ou quando seu valor é um dos valores "falsy" do PHP. Esta página explica exatamente quais valores são considerados vazios, as armadilhas que pegam as pessoas de surpresa, e quando usar empty() versus isset() ou is_null().

Sintaxe

bool empty(mixed $var)

empty() recebe um único argumento, $var, e retorna um boolean: true se a variável for considerada vazia, false caso contrário. Por ser uma construção de linguagem e não uma função regular, pode ser usada diretamente em variáveis que podem não existir sem disparar um aviso.

Nota: Antes do PHP 5.5, empty() só aceitava uma variável. O PHP moderno também permite expressões, por exemplo, empty(trim($name)).

Quais valores são "vazios"?

Uma variável está vazia quando não existe, ou quando seu valor é qualquer um dos seguintes:

Valorempty() retorna
"" (string vazia)true
"0" (string zero)true
0 (inteiro zero)true
0.0 (float zero)true
nulltrue
falsetrue
[] (array vazio)true
variável indefinidatrue
qualquer string não vazia (ex.: "hello")false
qualquer número diferente de zerofalse
um array não vaziofalse

Este é exatamente o conjunto de valores que o PHP trata como false em um contexto boolean, mais o caso em que a variável não está definida.

Exemplo de Uso

empty() não imprime nada para false/0 e 1 para true quando usado com echo, portanto este exemplo usa o resultado como rótulo inteiro para maior clareza.

php— editable, runs on the server

Aqui definimos seis variáveis de tipos diferentes: $var1 é uma string vazia, $var2 é uma string não vazia, $var3 é null, $var4 é 0, $var5 é a string "0", e $var6 é um array vazio. empty() retorna true para todas, exceto $var2. Note que echo imprime 1 para true e uma string vazia para false; adicionamos 0-vs-1 nos comentários para tornar o resultado legível.

Armadilhas comuns

"0" é considerado vazio

Esta é a surpresa mais comum. A string "0" é vazia de acordo com empty(), mesmo que claramente contenha um caractere. Isso importa para entradas de formulário: um usuário que digitar 0 em um campo de quantidade ou idade terá a entrada rejeitada se você validar com empty().

<?php
$age = "0";                       // a perfectly valid age from a form
var_dump(empty($age));            // bool(true)  -- oops, treated as missing
var_dump($age === "");            // bool(false) -- the field was NOT blank
?>

Se você quer apenas rejeitar um campo em branco, compare com "" ou use isset() mais uma verificação de comprimento em vez de empty().

empty() não emite aviso para variáveis ou chaves indefinidas

Ao contrário de acessar uma variável diretamente, empty() é seguro de chamar em algo que pode não existir. Ele retorna true e não emite nenhum aviso.

<?php
$config = ["timeout" => 30];

var_dump(empty($config["timeout"]));  // bool(false) -- key exists, value is 30
var_dump(empty($config["retries"]));  // bool(true)  -- key missing, no warning
var_dump(empty($undeclared));         // bool(true)  -- no "undefined variable" notice
?>

Isso torna empty() ideal para verificar chaves de array opcionais, como valores de $_POST ou $_GET, sem precisar chamar isset() antes.

empty() vs isset() vs is_null()

Esses três são fáceis de confundir. A diferença está em quais estados eles tratam como "sem valor":

Estado da variávelempty()isset()is_null()
não declaradatruefalseaviso + true
nulltruefalsetrue
"", 0, "0", []truetruefalse
"hello", 42falsetruefalse

Em resumo:

  • Use isset() quando você só quer saber se uma variável existe e não é null.
  • Use empty() quando quiser saber se há algum valor utilizável (sem se preocupar em distinguir 0/""/ausente).
  • Use is_null() quando precisar especificamente detectar null.

Um guard típico do mundo real para um campo de formulário opcional tem esta aparência:

<?php
$_POST = ["username" => "  "];   // simulate a submitted form with a blank-ish field

if (empty(trim($_POST["username"] ?? ""))) {
    echo "Username is required";
} else {
    echo "Welcome, " . trim($_POST["username"]);
}
?>

Saída:

Username is required

Aqui ?? "" fornece um valor padrão se a chave estiver ausente, trim() elimina entradas compostas apenas de espaços, e empty() captura tanto o caso ausente quanto o vazio.

Conclusão

empty() é uma proteção conveniente para verificar se uma variável contém um valor significativo, e é segura para usar em variáveis e chaves de array que podem não existir. Sua principal armadilha é que "0", 0 e strings vazias são todos considerados vazios, portanto não é a ferramenta certa quando zero é um valor legítimo — use isset() ou uma comparação explícita nesses casos. Para inspecionar exatamente o que uma variável contém durante a depuração, combine-o com var_dump() ou gettype().

Prática

Prática
Em PHP, quais características a função 'empty()' possui?
Em PHP, quais características a função 'empty()' possui?
Was this page helpful?