W3docs

filter_has_var()

Aprenda a usar a função PHP filter_has_var(): sintaxe, constantes de origem de entrada, diferenças em relação a isset() e exemplos práticos.

filter_has_var() verifica se uma variável de uma fonte de entrada específica (GET, POST, cookies, servidor ou ambiente) existe. Esta página aborda sua sintaxe, as constantes de fonte de entrada, como ela difere de isset(), e os erros comuns que costumam pegar as pessoas de surpresa.

O que filter_has_var() faz

filter_has_var() responde a uma única pergunta: essa fonte de entrada realmente enviou uma variável com esse nome? Ela retorna true ou false.

Ela não lê o valor, não o sanitiza nem o valida — para isso você usa filter_input() ou filter_var(). Pense em filter_has_var() como uma verificação de presença que examina o fluxo de entrada original, em vez dos superglobais $_GET / $_POST, que seu código pode ter modificado em tempo de execução.

Sintaxe

filter_has_var(int $input_type, string $var_name): bool
ParâmetroDescrição
$input_typeA fonte de entrada a ser consultada. Um dos constantes INPUT_* abaixo.
$var_nameO nome da variável a ser verificada.

Retorna true se uma variável chamada $var_name estiver presente na fonte de entrada fornecida, e false caso contrário.

Constantes de fonte de entrada

ConstanteFonte
INPUT_GETParâmetros de query string ($_GET)
INPUT_POSTCorpo do formulário ($_POST)
INPUT_COOKIECookies da requisição ($_COOKIE)
INPUT_SERVERVariáveis do servidor ($_SERVER)
INPUT_ENVVariáveis de ambiente ($_ENV)

Atenção: INPUT_REQUEST e INPUT_SESSION são definidos como constantes, mas não estão implementados. Passá-los sempre retorna false. Use INPUT_GET / INPUT_POST explicitamente.

Exemplo básico

Imagine uma requisição como [email protected]. Você pode verificar quais variáveis de query string foram enviadas:

<?php
// Given the query string: [email protected]

var_dump(filter_has_var(INPUT_GET, 'email'));    // bool(true)  — sent
var_dump(filter_has_var(INPUT_GET, 'username')); // bool(false) — not sent

Saída (quando essa requisição é de fato feita ao servidor):

bool(true)
bool(false)

Importante: filter_has_var() inspeciona os dados que o PHP capturou no início da requisição, não o conteúdo atual dos superglobais $_GET / $_POST. Atribuir a $_GET posteriormente no seu script não altera o que filter_has_var() enxerga. Isso também significa que ela retorna false para tudo quando o PHP é executado pela linha de comando, pois não há requisição HTTP para ler.

Validando que um campo foi enviado

O uso mais comum é proteger o processamento de formulários: confirmar que o campo existe antes de tentar validá-lo. Aqui, filter_has_var() distingue "o campo está ausente" de "o campo está presente, mas é inválido".

<?php

if (filter_has_var(INPUT_POST, 'email')) {
    $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
    if ($email !== false && $email !== null) {
        echo "Valid email: $email";
    } else {
        echo 'Invalid email address.';
    }
} else {
    echo 'Email field is missing.';
}

Se o campo email nunca aparecer no corpo do POST, você cai no ramo "ausente". Se ele aparecer mas estiver malformado, filter_input() retorna false e você cai no ramo "inválido".

filter_has_var() vs. isset()

As pessoas frequentemente perguntam por que não usar apenas isset($_POST['email']). Elas se sobrepõem, mas há duas diferenças reais:

  1. Fonte de verdade. isset($_POST['x']) lê o array $_POST, que sua aplicação pode ter removido ou sobrescrito. filter_has_var() examina os dados da requisição original capturados pelo PHP, tornando-a mais difícil de enganar.
  2. Valores vazios ainda contam como "presentes". Um valor enviado vazio (newsletter=) existe, então filter_has_var() retorna true. Se você precisar de "presente e não vazio", verifique o valor com empty():
<?php
// Simulate a present-but-empty submitted field.
$_GET['newsletter'] = '';

var_dump(isset($_GET['newsletter']));  // bool(true)  — the key exists
var_dump(empty($_GET['newsletter']));  // bool(true)  — but the value is empty

Saída:

bool(true)
bool(true)

Portanto, filter_has_var() confirma a presença; combine-a com empty() quando uma string vazia deve ser tratada como "não fornecida".

Por que usá-la

  • Intenção clara. Documenta que um trecho de código depende de uma fonte de entrada específica, e não apenas do que estiver em um superglobal.
  • Proteções mais seguras. Ler o fluxo de entrada bruto evita falsos positivos de variáveis que seu próprio código adicionou em tempo de execução.
  • Validação componível. Separar a verificação de presença (filter_has_var()) da verificação de valor (filter_input() / filter_var()) mantém a lógica de validação modular e fácil de ler, reduzindo a chance de aceitar entradas inesperadas que levam a problemas como injeção SQL ou XSS.

Conclusão

filter_has_var() é uma verificação de presença focada para entradas de requisição: ela informa se uma variável INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER ou INPUT_ENV foi enviada, e nada mais. Combine-a com filter_input() ou filter_var() para validar o valor, e com empty() quando um valor vazio deve ser considerado como ausente.

Prática

Prática
O que a função PHP filter_has_var() faz?
O que a função PHP filter_has_var() faz?
Was this page helpful?