W3docs

isset()

A função isset() do PHP verifica se uma variável foi definida e não é null, retornando true se existir e false caso contrário.

Introdução

O construto isset() é um construto de linguagem nativo do PHP que verifica se uma variável foi definida. Ele retorna true se a variável existir e não for null, e false caso contrário.

O ponto fundamental a entender é que isset() se preocupa apenas com a existência, não com a veracidade. Ele retorna true mesmo quando o valor é 0, false, "0" ou uma string vazia "" — retorna false somente para variáveis que nunca foram definidas, que foram removidas com unset ou que contêm null.

Isso torna o isset() a forma segura de testar chaves de array e campos de formulário antes de lê-los, evitando os avisos "Undefined variable" e "Undefined array key" que o PHP emite ao acessar algo inexistente.

Esta página abrange a sintaxe do isset(), seu comportamento com null, 0 e chaves de array ausentes, como verificar diversas variáveis ao mesmo tempo e como ele difere das funções relacionadas empty(), is_null() e array_key_exists().

Sintaxe

A sintaxe do construto isset() é a seguinte:

Sintaxe PHP de isset()

bool isset(mixed $var [, mixed $... ])

O construto aceita um ou mais parâmetros — $var e parâmetros adicionais opcionais separados por vírgulas. Cada parâmetro representa uma variável a ser verificada. O construto retorna true se todas as variáveis existirem e não forem null, e false caso contrário.

Exemplo de Uso

Veja um exemplo de como usar o construto isset() em PHP:

Exemplo de isset() no PHP

<?php
$var1 = "hello";
$var2 = null;
$var3 = 0;
$array = ['key' => 'value'];

if (isset($var1)) {
    echo '$var1 is set and is not null' . "\n";
}
if (isset($var2)) {
    echo '$var2 is set and is not null' . "\n";
} else {
    echo '$var2 is not set or is null' . "\n";
}
if (isset($var3)) {
    echo '$var3 is set (value is 0)' . "\n";
}
if (isset($array['key'])) {
    echo "Array key 'key' is set" . "\n";
}
?>

Neste exemplo, definimos diversas variáveis e um array. Usamos o construto isset() para verificar se cada variável ou chave de array está definida. O primeiro if retorna true porque $var1 está definida. O segundo if retorna false porque $var2 é null, portanto o bloco else é executado. O terceiro if retorna true porque $var3 está definida com o valor 0 (demonstrando que isset() verifica a existência, não a veracidade). O quarto if retorna true porque a chave de array 'key' existe.

Verificando Diversas Variáveis ao Mesmo Tempo

isset() aceita múltiplos argumentos e retorna true somente quando todos os argumentos estão definidos e não são null. Assim que um deles estiver ausente ou for null, toda a chamada retorna false. Isso é conveniente para validar que um grupo de valores obrigatórios está todo presente antes de continuar:

<?php
$name  = "Ada";
$email = "[email protected]";
$phone = null;

if (isset($name, $email)) {
    echo "Both name and email are set" . "\n";
}

if (isset($name, $email, $phone)) {
    echo "All three are set" . "\n";
} else {
    echo "At least one of name, email, phone is missing or null" . "\n";
}
?>

Como $phone é null, o segundo isset() retorna false mesmo que os outros dois estejam definidos.

Arrays Aninhados e Chaves Ausentes

Um motivo comum para usar isset() é a leitura de dados profundamente aninhados, como $_POST ou uma estrutura JSON decodificada, onde qualquer nível pode estar ausente. O isset() faz um curto-circuito seguro: se uma chave intermediária não existir, retorna false em vez de emitir um aviso.

<?php
$user = [
    'profile' => [
        'name' => 'Grace',
    ],
];

var_dump(isset($user['profile']['name']));   // bool(true)
var_dump(isset($user['profile']['age']));    // bool(false) - key missing
var_dump(isset($user['settings']['theme'])); // bool(false) - 'settings' missing entirely
?>

Observe que isset() retorna false para uma chave existente cujo valor seja null. Se for necessário distinguir "a chave existe mas contém null" de "a chave não existe", use array_key_exists().

isset() vs empty(), is_null() e array_key_exists()

Essas quatro funções são fáceis de confundir. A tabela mostra o que cada uma retorna para uma variável $x com diferentes valores:

Valor de $xisset($x)empty($x)is_null($x)
"text"truefalsefalse
0 / 0.0 / "0"truetruefalse
"" (string vazia)truetruefalse
nullfalsetruetrue
indefinida / unsetfalsetrueaviso + true

Principais conclusões:

  • Use isset() quando quiser saber se algo existe e não é null — ele nunca emite aviso sobre variáveis indefinidas.
  • Use empty() quando quiser saber se um valor é "falsy" (0, "", null, false, array vazio, etc.).
  • Use is_null() quando se importar especificamente com o valor null — mas note que ele emite aviso se a variável nunca foi definida.
  • Use array_key_exists() quando uma chave puder legitimamente conter null e você ainda precisar detectar sua presença.

O Atalho de Coalescência Nula

Desde o PHP 7, o operador de coalescência nula ?? é uma alternativa concisa a uma verificação com isset() seguida de um valor de fallback. A expressão $a ?? $b é avaliada como $a se estiver definida e não for null; caso contrário, como $b — sem emitir nenhum aviso:

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

// Verbose: explicit isset()
$retries = isset($config['retries']) ? $config['retries'] : 5;
echo $retries . "\n"; // 5

// Concise: same result with the ?? operator
$timeout = $config['timeout'] ?? 60;
echo $timeout . "\n"; // 30
?>

Use ?? sempre que precisar apenas de um valor padrão; mantenha isset() quando precisar do resultado boolean em si, por exemplo, dentro de uma condição maior.

Conclusão

O construto isset() é uma ferramenta útil para verificar se uma variável foi definida em PHP. Ele pode ser usado para garantir que uma variável existe antes de realizar operações sobre ela, ou para tratar variáveis definidas e indefinidas de uma maneira específica. Ao usar esse construto, os desenvolvedores podem assegurar que seu código trabalha com os dados esperados e evitar erros que podem ocorrer ao lidar com valores null.

Prática

Prática
Qual é a função do isset() no PHP?
Qual é a função do isset() no PHP?
Was this page helpful?