Ответ 1
Я еще не использовал его, но я думаю, что "get_defined_vars" стоит посмотреть... http://php.net/manual/en/function.get-defined-vars.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): "
Примечание: переменная Undefined: myUndefined в C:\wamp\www\plm\temp4.php в строке 9
$ myUndefined value = "
Я хочу знать, есть ли переменная Undefined, как сказано выше в уведомлении. Я хочу функцию, назовите ее "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));
, который будет отображаться, если он true или false.
Также у вас есть эхо $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()
для этого, если переменная, которую вы даете, не находится в таблице символов, она возвращает пустой массив, в противном случае массив, содержащий пару имя/значение переменной, просто передайте результат в boolean
<?php
$myNull = null;
$isDefined = (bool) compact('myNull'); // true
$otherIsDefined = (bool) compact('myUndefined'); // false
Если вы используете OOP, используйте перегрузку __isset()
, эта функция будет выполняться, когда вы пытаетесь получить доступ к переменной, которая не определена нигде. Пример:
public function __isset($name) {
echo 'Hello';
}
Таким образом, избегается любое сообщение об ошибке или уведомление, связанное с переменной undefined
Да, как упоминал выше г-н Джонатан, мы могли бы использовать array_key_exists() + $GLOBALS, а не get_defined_vars(), чтобы идентифицировать переменную Undefined в 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