Menu

PHP isset(): verificar se variável ou chave existe

isset($var) retorna true quando uma variável existe e não é null, e false caso contrário, sem nenhum aviso. Também verifica chaves de array e propriedades de objetos: isset($user['email']). Veja isset com várias variáveis, chaves aninhadas, isset ou empty, isset ou array_key_exists e como verificar envios de formulário.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

isset($var) retorna true se a variável existe e o valor dela não é null. Ele retorna false para uma variável indefinida, removida com unset ou que guarda null, e nunca imprime aviso.

isset() só olha se algo está lá. Um valor definido mas vazio, como 0, "" ou [], ainda retorna true. Se você quer "definido e não vazio", use empty (negado).

Verificar se uma chave de array existe com isset

É aqui que o isset() é mais usado. Ler uma chave que não existe imprime Warning: Undefined array key numa configuração normal do PHP; verificar antes com isset() não imprime. Também funciona com chaves aninhadas e para em silêncio no primeiro nível ausente.

Quando você só precisa do valor ou de um padrão, $user["website"] ?? "none" faz a mesma verificação num passo. Veja o operador de coalescência nula.

isset com várias variáveis

Passe vários argumentos e o isset() retorna true só se todos estiverem definidos e não forem null. É um jeito curto de verificar que todos os campos obrigatórios chegaram.

isset em strings e objetos

Numa string, isset($str[5]) verifica se existe um caractere no offset 5, o que é uma verificação rápida de tamanho. Num objeto, verifica uma propriedade; para uma classe com dados privados, o isset() chama o método __isset() se a classe o definir.

isset, empty e is_null

Escolha um valor de $x na tabela para comparar as três verificações e o cast (bool) simples. Cada célula foi calculada pelo PHP 8.3.

isset, empty e is_null para cada valor de $x
Point at or tap a cell to read it as PHP.
$xissetemptyis_nullbool
null
false
0
"0"
""
" "
[]
"a"
1
0.0
"0.0"
Every cell computed by PHP 8.3.19.

O padrão para lembrar:

  • isset() é false só para null e para coisas que não existem.
  • empty() é true para esses casos e também para todo valor falso: false, 0, 0.0, "", "0", [].
  • is_null() dá o oposto de isset() para variáveis existentes, mas avisa quando a variável é indefinida. Use isset() ou === null no lugar.

Verificar se um formulário foi enviado

isset() é o jeito clássico de ver se um campo do formulário chegou. Rode este bloco, digite um nome e clique em Send: o mesmo script roda de novo com $_POST preenchido.

Um campo de texto vazio ainda é enviado, como "", então isset($_POST["name"]) é true depois de qualquer envio. Um checkbox desmarcado não é enviado, o que torna o isset() exatamente o teste certo para checkboxes. Para exigir um valor não vazio, verifique a string com trim como o bloco faz. A página sobre formulários monta um formulário completo com validação.

isset ou array_key_exists

Os dois concordam em tudo, exceto numa chave cujo valor é null. isset() a trata como ausente, array_key_exists() não.

Se "definido como null" significa algo diferente de "não configurado" nos seus dados, use array_key_exists(). Caso contrário, isset() é mais curto e, por ser uma construção da linguagem e não uma chamada de função, também é um pouco mais rápido.

Erro comum: isset numa expressão

isset() só aceita variáveis, elementos de array e propriedades. Passar o resultado de uma função ou uma constante é um erro de compilação:

<?php
if (isset(trim($input))) {}
PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /home/index.php on line 2

Guarde o resultado numa variável antes, ou teste o próprio valor: null !== $expr, como a mensagem sugere, ou trim($input) !== "" para uma string.

Perguntas frequentes

O que faz o isset() no PHP?

isset($x) retorna true se $x existe e não é null, e false caso contrário. Ele nunca gera aviso para uma variável ou chave de array indefinida, então é seguro com dados da requisição como isset($_POST['email']).

Qual a diferença entre isset() e empty() no PHP?

isset() pergunta "isto existe e não é null"; empty() pergunta "isto está ausente ou é falso". Para 0, "", "0" e [], isset() retorna true e empty() também retorna true. Para null ou uma chave ausente, isset() é false e empty() é true. !empty($x) é o mesmo que isset($x) && $x ser verdadeiro.

isset() pode verificar várias variáveis?

Sim: isset($a, $b, $c) retorna true só se todas estiverem definidas e não forem null. Ele para na primeira que não está definida.

Devo usar isset() ou array_key_exists()?

Eles só diferem quando a chave existe com o valor null: isset($arr['k']) retorna false, array_key_exists('k', $arr) retorna true. Use array_key_exists quando null for um valor guardado com significado; caso contrário, isset é mais curto e um pouco mais rápido.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR