PHP - verifique se a variável é indefinida

87

Considere esta declaração jquery

isTouch = document.createTouch !== undefined

Gostaria de saber se temos uma instrução semelhante em PHP, não sendo isset (), mas literalmente verificando um valor indefinido, algo como:

$isTouch != ""

Existe algo semelhante ao acima em PHP?

Timothy Coetzee
fonte

Respostas:

167

Você pode usar -

$isTouch = isset($variable);

Ele retornará truese o $variablefor definido. se a variável não for definida, ela retornará false.

Nota: Retorna TRUE se var existe e tem valor diferente de NULL, caso contrário FALSE.

Se você deseja verificar false, 0etc. Você pode usar empty()-

$isTouch = empty($variable);

empty() trabalha para -

  • "" (uma string vazia)
  • 0 (0 como um inteiro)
  • 0,0 (0 como flutuante)
  • "0" (0 como string)
  • NULO
  • FALSO
  • array () (um array vazio)
  • $ var; (uma variável declarada, mas sem um valor)
Sougata Bose
fonte
1
isset()sempre retorna bool.
VeeeneX de
O elenco booleano é necessário? isset (...) já retorna bool certo?
Cr3aHal0
1
Não. Volte trueou false. Portanto, não há necessidade desse elenco.
Sougata Bose
1
você também pode fazer isso usando o empty()que retornaria false se for uma string vazia. isset()retornará verdadeiro se for uma string vazia, também vazio faz uma verificação de isset internamente.
mic
1
você também pode fazer isso: $isTouch = (bool) $variable;que fará o mesmo que isset()e talvez seja um pouco melhor, pois funcionará assim empty().
mic
19

Outra maneira é simplesmente:

if($test){
    echo "Yes 1";
}
if(!is_null($test)){
    echo "Yes 2";
}

$test = "hello";

if($test){
    echo "Yes 3";
}

Retornará :

"Yes 3"

A melhor maneira é usar isset (), caso contrário, você pode ter um erro como "undefined $ test".

Você pode fazer assim:

if( isset($test) && ($test!==null) )

Você não terá nenhum erro porque a primeira condição não foi aceita.

TiDJ
fonte
Se usarmos $test!==nullsem colchetes, o que acontecerá? Irá dar erro?
Vir de
Não, tudo bem também.
TiDJ de
7

Para verificar se a variável está definida, você precisa usar a função isset.

$lorem = 'potato';

if(isset($lorem)){
    echo 'isset true' . '<br />';
}else{
    echo 'isset false' . '<br />';
}

if(isset($ipsum)){
    echo 'isset true' . '<br />';
}else{
    echo 'isset false' . '<br />';
}

este código irá imprimir:

isset true
isset false

leia mais em https://php.net/manual/en/function.isset.php

ErasmoOliveira
fonte
6

Você pode usar -

Operador ternário para verificar o valor de tempo definido por POST / GET ou não algo assim

$value1 = $_POST['value1'] = isset($_POST['value1']) ? $_POST['value1'] : '';
$value2 = $_POST['value2'] = isset($_POST['value2']) ? $_POST['value2'] : '';
$value3 = $_POST['value3'] = isset($_POST['value3']) ? $_POST['value3'] : '';
$value4 = $_POST['value4'] = isset($_POST['value4']) ? $_POST['value4'] : '';
Sumit Thakur
fonte
3

JavaScript do 'estrito não igual' operador ( !==) em comparação com os undefinedque não resultar em falseem nullvalores.

var createTouch = null;
isTouch = createTouch !== undefined  // true

Para obter um comportamento equivalente em PHP, você pode verificar se o nome da variável existe nas chaves do resultado de get_defined_vars().

// just to simplify output format
const BR = '<br>' . PHP_EOL;

// set a global variable to test independence in local scope
$test = 1;

// test in local scope (what is working in global scope as well)
function test()
{
  // is global variable found?
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.' ) . BR;
  // $test does not exist.

  // is local variable found?
  $test = null;
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.' ) . BR;
  // $test exists.

  // try same non-null variable value as globally defined as well
  $test = 1;
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.' ) . BR;
  // $test exists.

  // repeat test after variable is unset
  unset($test);
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.') . BR;
  // $test does not exist.
}

test();

Na maioria dos casos, isset($variable)é apropriado. Isso é aquivalente para array_key_exists('variable', get_defined_vars()) && null !== $variable. Se você apenas usar null !== $variablesem pré-verificar a existência, irá bagunçar seus logs com avisos porque isso é uma tentativa de ler o valor de uma variável indefinida.

No entanto, você pode aplicar uma variável indefinida a uma referência sem qualquer aviso:

// write our own isset() function
function my_isset(&$var)
{
  // here $var is defined
  // and initialized to null if the given argument was not defined
  return null === $var;
}

// passing an undefined variable by reference does not log any warning
$is_set = my_isset($undefined_variable);   // $is_set is false
Clone de Quasimodo
fonte
0
if(isset($variable)){
    $isTouch = $variable;
}

OU

if(!isset($variable)){
    $isTouch = "";// 
}
Waruna Manjula
fonte