Убедитесь, что переменная is_undefined в PHP

В PHP я хочу проверить, не была ли задана / определена переменная , где значение переменной NULL считается заданной / определенной .

Я знаю все здесь: http://php.net/manual/en/types.comparisons.php, включая isset (), empty () и is_null (). Ничто из этого не похоже на то, что я ищу. Рассмотрим следующий пример:

<?php $myNull = null; echo 'isset($myNull): "'.isset($myNull).'"<br />'; echo '$myNull value = "'.$myNull . '"<br />'; echo "<br />"; echo 'isset($myUndefined): "'.isset($myUndefined).'"<br />'; echo '$myUndefined value = "'.$myUndefined . '"<br />'; ?> 

Этот пример выводит что-то вроде:
isset ($ myNull): ""
$ myNull value = ""

isset ($ myUndefined): ""
Примечание. Неопределенная переменная: myUndefined в C: \ wamp \ www \ plm \ temp4.php в строке 9
$ myUndefined value = ""

Я хочу знать, является ли переменная неопределенной, как сказано выше в уведомлении. Мне нужна функция, назовите ее «is_undefined», где

 $myNull = null; is_undefined($myNull); // is false is_undefined($myUndefined); // is true 

Кто угодно? Заранее спасибо.

Я еще не использовал его, но я думаю, что «get_defined_vars» стоит посмотреть … http://php.net/manual/en/function.get-defined-vars.php

Я бы попробовал и дал результат.

Я думаю, что get_defined_vars является хорошим кандидатом на такую ​​работу:

 array_key_exists('myNull', get_defined_vars()); 

Должен делать то, что вы ожидаете.

Если вы работаете в глобальном контексте, вы также можете использовать:

 array_key_exists('myNull', $GLOBALS); 

Если вы хотите использовать функцию is_undefined, я бы предпочел не работать с массивами, поэтому я бы сделал следующее:

 function is_undefined(&$test) { return isset($test) && !is_null($test); } 

Поэтому, когда вы echo isset($myNull); он преобразует логическое (true) в "". поэтому значение пустое. Если вы хотите увидеть его на экране, вы можете сделать var_dump(isset($myNull)); который будет отображаться, если это правда или ложно.

Также у вас есть эхо $ myUndefined, но оно еще не установлено, поэтому вы получаете предупреждение. Что вы хотите сделать:

 if (!empty($myUndefined)) { // variable is defined so do something with it echo '$myUndefined value = "' . $myUndefined . '"<br />'; } else { echo 'Oops, $myUndefined is Undefined!<br />"; } 

Вот краткий обзор isset () vs. is_null () void empty ()

 $foo = null; // isset($foo) == true; // empty($foo) == true; // is_null($foo) == true; // Notice I don't set $foo2 to anything // isset($foo2) == false; // empty($foo2) == true; // is_null($foo2) throws a notice! $foo3 = false; // isset($foo2) == true; // empty($foo2) == true; // is_null($foo2) == false; $foo4 = 1234; // isset($foo2) == true; // empty($foo2) == false; // is_null($foo2) == false; 

Вы можете использовать compact() для этого тоже, если переменная, которую вы даете, не находится в таблице символов, она возвращает пустой массив, в противном случае массив, содержащий пару имя / значение переменной, просто передайте результат в логическое

 <?php $myNull = null; $isDefined = (bool) compact('myNull'); // true $otherIsDefined = (bool) compact('myUndefined'); // false 

Если вы используете OOP, используйте перегрузку __isset() эта функция будет выполняться, когда вы пытаетесь получить доступ к переменной, которая не определена нигде. пример:

  public function __isset($name) { echo 'Hello'; } 

Таким образом, избегается любое сообщение об ошибке или уведомление, связанное с неопределенной переменной

Да, как упоминал выше г-н Джонатан, мы могли бы использовать array_key_exists () + $ GLOBALS, а не get_defined_vars (), чтобы идентифицировать неопределенную переменную в null

 $x; // $x is undefined $y=null; // $y is defined and is NULL type variable with the only null value $z=[]; // $z is an array object if( array_key_exists('x', $GLOBALS) && is_null($x) ) echo "\$x exists and is null\n"; if( array_key_exists('y', $GLOBALS) && is_null($y) ) echo "\$y exists and is null\n"; if( array_key_exists('z', $GLOBALS) && is_null($z) ) echo "\$he exists and is null\n"; // output $y exists and is null