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:
| Valor | empty() retorna |
|---|---|
"" (string vazia) | true |
"0" (string zero) | true |
0 (inteiro zero) | true |
0.0 (float zero) | true |
null | true |
false | true |
[] (array vazio) | true |
| variável indefinida | true |
qualquer string não vazia (ex.: "hello") | false |
| qualquer número diferente de zero | false |
| um array não vazio | false |
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.
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ável | empty() | isset() | is_null() |
|---|---|---|---|
| não declarada | true | false | aviso + true |
null | true | false | true |
"", 0, "0", [] | true | true | false |
"hello", 42 | false | true | false |
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 distinguir0/""/ausente). - Use
is_null()quando precisar especificamente detectarnull.
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 requiredAqui ?? "" 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().