Ao verificar se uma variável está definida em PHP, nosso primeiro impulso pode ser usar a função isset(). E embora isso funcione para a maioria dos casos, se olharmos para a definição da função isset(), veremos o seguinte:
isset: determina se uma variável é declarada e é diferente de null.
No entanto, em PHP, podemos definir uma variável como NULL:
<?php $variable = NULL; var_dump(isset($variable));
Esta verificação retornará false - mesmo que tenhamos definido explicitamente nossa variável como NULL! Esta é uma condição dentro do PHP que pode gerar alguma confusão. Conforme avançamos abaixo, veremos o método isset() e quando usá-lo, e quais outros métodos podemos usar quando o isset() não funcionar.
Entram em cena empty() e is_null()
Enquanto o método isset() pode nos ajudar a determinar se uma variável foi definida com algum valor, ele não nos ajudará se a variável foi definida como NULL. Para lidar com essa situação, precisamos usar a função empty() ou a função is_null(). A função empty() determinará se uma variável está vazia. Ele funcionará (ou seja, retornará true) para:
- "" (uma string vazia)
- 0 (0 como um número inteiro)
- 0.0 (0 como um número de ponto flutuante)
- "0" (0 como uma string)
- NULL
- FALSE
- array() (um array vazio)
- $var; (uma variável declarada, mas sem valor)
Isso significa que podemos usar empty() para determinar se uma variável está vazia ou não. E, nesse caso, tanto NULL quanto false são considerados vazios:
<?php $variable = NULL; var_dump(empty($variable));
Também podemos usar a função is_null(). Essa função determinará se uma variável é nula ou não.
Aqui está um exemplo de uso da função is_null() para determinar se uma variável é ou não nula:
<?php $variable = NULL; var_dump(is_null($variable));
A coisa mais importante ao lidar com variáveis em PHP é entender as diferenças entre isset(), is_null() e empty(). Essas três funções podem ser usadas para determinar o status de uma variável, mas têm comportamentos diferentes. A tabela a seguir pode ser usada para destacar as diferenças entre as funções.
Existe uma única função que podemos usar?
Usando get_defined_vars(), retornará um array associativo com chaves como nomes de variáveis e valores como os valores das variáveis. Ainda não podemos usar isset(get_defined_vars()['variavel']) aqui, porque a chave poderia existir e o valor ainda ser nulo, então temos que usar array_key_exists('variavel', get_defined_vars()).
Por exemplo:
<?php $variable = null; $isset = array_key_exists('variable', get_defined_vars()); var_dump($isset); // true $isset = array_key_exists('anotherVariable', get_defined_vars()); var_dump($isset); // false
Ao usar get_defined_vars() desta forma, podemos ter 100% de certeza de que estamos verificando se a variável está definida ou não.
Conclusão
Neste breve artigo, discutimos como podemos verificar se uma variável está definida em PHP ou não. Também analisamos as diferenças entre definido, vazio e nulo, e as principais considerações a serem mantidas em mente ao usar as funções comuns isset(), is_null() e empty(). Portanto, da próxima vez que você precisar verificar o status de uma variável PHP, terá todas as informações necessárias para escolher o método correto e eliminar todas as ambiguidades do seu código.