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
| Valor | isset() | empty() |
|---|---|---|
| não definida | false | true |
null | false | true |
"" | true | true |
0 | true | true |
"0" | true | true |
false | true | true |
[] | true | true |
"abc" | true | false |
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"e0contam como vazio.??: para definir valores padrão.
