В 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