PHP - перевірте, чи не визначена змінна


87

Розглянемо цей твердження jquery

isTouch = document.createTouch !== undefined

Я хотів би знати, чи є у нас подібне твердження в PHP, не будучи isset (), а буквально перевіряючи невизначене значення, щось на зразок:

$isTouch != ""

Чи є щось подібне до вищезазначеного у PHP?


Відповіді:


167

Ви можете використовувати -

$isTouch = isset($variable);

Він повернеться, trueякщо $variableвизначено. якщо змінна не визначена, вона повернеться false.

Примітка: Повертає TRUE, якщо var існує і має значення, відмінне від NULL, FALSE в іншому випадку.

Якщо ви хочете перевірити false, і 0т.д. Ви можете використовувати empty()-

$isTouch = empty($variable);

empty() працює для -

  • "" (порожній рядок)
  • 0 (0 як ціле число)
  • 0,0 (0 як поплавок)
  • "0" (0 як рядок)
  • НУЛЬ
  • ПОМИЛКОВИЙ
  • array () (порожній масив)
  • $ var; (оголошена змінна, але без значення)

1
isset()завжди повертає bool.
VeeeneX

Чи потрібен булевий привід? isset (...) вже повертає bool правильно?
Cr3aHal0

1
Ні. Це повернення trueабо false. Тож не потрібно цього кастингу.
Sougata Bose

1
Ви також можете зробити це, використовуючи функцію, empty()яка повертає false, якщо це порожній рядок. isset()поверне true, якщо це порожній рядок, також порожній внутрішньо перевіряє isset.
мікрофон

1
Ви також можете зробити це: $isTouch = (bool) $variable;який буде робити те саме, що isset()і, можливо, трохи краще, оскільки він буде працювати як empty().
мікрофон

19

Інший спосіб - це просто:

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

$test = "hello";

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

Повернеться :

"Yes 3"

Найкращий спосіб - використовувати isset (), інакше у вас може виникнути помилка типу "undefined $ test".

Ви можете зробити це так:

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

У вас не буде помилок, оскільки перша умова не приймається.


Якщо ми використовуємо $test!==nullбез дужок, то що буде? Це дасть помилку?
Вір,

Ні, це теж нормально.
TiDJ

7

Щоб перевірити, чи встановлено змінну, потрібно використовувати функцію 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 />';
}

цей код надрукує:

isset true
isset false

детальніше читайте на https://php.net/manual/en/function.isset.php


6

Ви можете використовувати -

Трійковий оператор, щоб перевірити значення погоди, встановлене POST / GET, або щось подібне

$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'] : '';

3

JavaScript на «строго не дорівнює» оператор ( !==) в порівнянні з undefinedзовсім НЕ призводить до falseпо nullзначенням.

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

Щоб досягти еквівалентної поведінки в PHP, ви можете перевірити, чи існує ім'я змінної в ключах результату 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();

У більшості випадків isset($variable)це доречно. Це еквівалентно array_key_exists('variable', get_defined_vars()) && null !== $variable. Якщо ви просто використовуєте null !== $variableбез попередньої перевірки існування, ви зіпсуєте свої журнали з попередженнями, оскільки це спроба прочитати значення невизначеної змінної.

Однак ви можете застосувати невизначену змінну до посилання без будь-якого попередження:

// 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.