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 в виде строки)
  • ЗНАЧЕНИЕ NULL
  • ЛОЖНЫЙ
  • array () (пустой массив)
  • $ var; (объявленная переменная, но без значения)
Сугата Бозе
источник
1
isset()всегда возвращает bool.
VeeeneX
Требуется ли логическое приведение? isset (...) уже возвращает bool, верно?
Cr3aHal0
1
Нет. Это возврат trueили false. Так что в кастинге нет нужды.
Сугата Бозе,
1
вы также можете сделать это с помощью, empty()который вернет false, если это пустая строка. isset()вернет true, если это пустая строка, также empty выполняет внутреннюю проверку isset.
mic
1
вы также можете сделать это: $isTouch = (bool) $variable;который будет делать то же самое, isset()и, возможно, немного лучше, поскольку он будет работать как empty().
mic
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) )

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

TiDJ
источник
Если использовать $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
Клон Квазимодо
источник
0
if(isset($variable)){
    $isTouch = $variable;
}

ИЛИ

if(!isset($variable)){
    $isTouch = "";// 
}
Варуна Манджула
источник