Programação

empty e isset no PHP: o que é e como usar?

empty e isset no PHP: diferença, o que cada função retorna para null, 0, "0", string vazia e array, quando usar cada uma e o operador ??.

Capa: empty e isset no PHP: o que é e como usar?

As funções isset() e empty() verificam o estado de variáveis, mas respondem a perguntas diferentes. Confundi-las é fonte comum de bugs em validação de formulários.

isset()

Retorna true se a variável existe e não é null. Aceita várias variáveis (retorna true só se todas estiverem definidas).

$nome = "Ana";
var_dump(isset($nome));          // true
var_dump(isset($naoExiste));     // false
var_dump(isset($_POST['email'])); // true se o campo foi enviado

empty()

Retorna true se a variável não existe ou tem um valor "vazio". Não gera aviso para variável inexistente.

São considerados vazios: "", 0, 0.0, "0", null, false e [].

Comparativo

Valorisset()empty()
não definidafalsetrue
nullfalsetrue
""truetrue
0truetrue
"0"truetrue
falsetruetrue
[]truetrue
"abc"truefalse

Armadilha comum

Se o campo "quantidade" aceita 0, empty($_POST['qtd']) trata 0 como vazio e rejeita um valor válido. Nesse caso, combine as verificações:

if (isset($_POST['qtd']) && $_POST['qtd'] !== '') {
    $qtd = (int) $_POST['qtd'];
}

Operador de coalescência nula (??)

Desde o PHP 7, o ?? devolve um valor padrão quando a variável não existe ou é null, sem avisos:

$nome = $_GET['nome'] ?? 'Visitante';

Quando usar

  • isset(): para saber se um índice ou variável foi definido (ex.: campo enviado, chave de array).
  • empty(): para checar se há conteúdo útil, lembrando que "0" e 0 contam como vazio.
  • ??: para definir valores padrão.

Mais artigos