PHP - sprawdź, czy zmienna jest niezdefiniowana

87

Rozważ tę instrukcję jQuery

isTouch = document.createTouch !== undefined

Chciałbym wiedzieć, czy mamy podobną instrukcję w PHP, która nie jest isset (), ale dosłownie sprawdza niezdefiniowaną wartość, coś takiego:

$isTouch != ""

Czy w PHP jest coś podobnego do powyższego?

Timothy Coetzee
źródło

Odpowiedzi:

167

Możesz użyć -

$isTouch = isset($variable);

Zwróci, truejeśli $variablezdefiniowano. jeśli zmienna nie jest zdefiniowana, zwróci false.

Uwaga: zwraca TRUE, jeśli istnieje zmienna i ma wartość inną niż NULL, w przeciwnym razie FALSE.

Jeśli chcesz sprawdzić false, 0etc Następnie można użyć empty()-

$isTouch = empty($variable);

empty() pracuje dla -

  • „” (pusty ciąg)
  • 0 (0 jako liczba całkowita)
  • 0,0 (0 jako liczba zmiennoprzecinkowa)
  • „0” (0 jako ciąg)
  • ZERO
  • FAŁSZYWY
  • array () (pusta tablica)
  • $ var; (zadeklarowana zmienna, ale bez wartości)
Sougata Bose
źródło
1
isset()zawsze zwraca bool.
VeeeneX
Czy rzutowanie boolowskie jest konieczne? isset (...) już zwraca wartość bool, prawda?
Cr3aHal0
1
Nie. Wraca truelub false. Więc nie ma potrzeby tego odlewania.
Sougata Bose
1
można to również zrobić, używając polecenia, empty()które zwróci wartość false, jeśli jest to pusty ciąg. isset()zwróci prawdę, jeśli jest to pusty łańcuch, również pusty sprawdza wewnętrznie isset.
mikrofon
1
możesz też to zrobić: $isTouch = (bool) $variable;co zrobi to samo co isset()i może jest trochę lepsze, ponieważ będzie działać tak samo empty().
mikrofon
19

Innym sposobem jest po prostu:

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

$test = "hello";

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

Wróci :

"Yes 3"

Najlepszym sposobem jest użycie isset (), w przeciwnym razie może pojawić się błąd typu „undefined $ test”.

Możesz to zrobić w ten sposób:

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

Nie będziesz mieć żadnego błędu, ponieważ pierwszy warunek nie zostanie zaakceptowany.

TiDJ
źródło
Jeśli użyjemy $test!==nullbez nawiasów, to co się stanie? Czy spowoduje to błąd?
Vir
Nie, to też jest w porządku.
TiDJ
7

Aby sprawdzić, czy zmienna jest ustawiona, musisz użyć funkcji 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 />';
}

ten kod wydrukuje:

isset true
isset false

czytaj więcej na https://php.net/manual/en/function.isset.php

ErasmoOliveira
źródło
6

Możesz użyć -

Operator trójskładnikowy, aby sprawdzić, czy wartość ustawiona przez POST / GET, czy nie ma czegoś takiego

$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
źródło
3

JavaScript jest „ścisłe nie równa” operator ( !==) na porównaniu undefinedma nie powodować falsena nullwartości.

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

Aby osiągnąć równoważne zachowanie w PHP, możesz sprawdzić, czy nazwa zmiennej istnieje w kluczach wyniku 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();

W większości przypadków isset($variable)jest to właściwe. To jest równoważne z array_key_exists('variable', get_defined_vars()) && null !== $variable. Jeśli po prostu użyjesz null !== $variablebez wstępnego sprawdzania istnienia, zepsujesz swoje dzienniki ostrzeżeniami, ponieważ jest to próba odczytania wartości niezdefiniowanej zmiennej.

Możesz jednak zastosować niezdefiniowaną zmienną do odwołania bez żadnego ostrzeżenia:

// 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
Klon Quasimodo
źródło
0
if(isset($variable)){
    $isTouch = $variable;
}

LUB

if(!isset($variable)){
    $isTouch = "";// 
}
Waruna Manjula
źródło