检查PHP中的变量是否为is_undefined

tjb*_*rke 16 php isnull isset isnullorempty

在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 />';
?>
Run Code Online (Sandbox Code Playgroud)

这个例子中,输出是这样的:
isset($ myNull): ""
$ myNull值= ""

isset($ myUndefined):""
注意:未定义的变量:第9行的C:\ wamp\www\plm\temp4.php中的myUndefined
$ myUndefined value =""

我想知道变量是否是Undefined,如上面通知中所述.我想要一个函数,称之为"is_undefined",其中

$myNull = null;
is_undefined($myNull); // is false
is_undefined($myUndefined); // is true
Run Code Online (Sandbox Code Playgroud)

任何人?提前致谢.

clj*_*ljk 19

我还没用过它 - 但我认为"get_defined_vars"值得一看...... http://php.net/manual/en/function.get-defined-vars.php

我会试一试并转储结果.

  • 有时我希望我可以多次投票. (2认同)

Ala*_*blo 9

我认为get_defined_vars是这项工作的一个很好的候选人:

array_key_exists('myNull', get_defined_vars());
Run Code Online (Sandbox Code Playgroud)

应该做你期望的.

如果您处理全局上下文,您还可以使用:

array_key_exists('myNull', $GLOBALS);
Run Code Online (Sandbox Code Playgroud)


chr*_*don 6

如果你想要一个is_undefined函数,我宁愿不使用数组,所以我会这样做:

function is_undefined(&$test) {
    return isset($test) && !is_null($test);
}
Run Code Online (Sandbox Code Playgroud)

所以当你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 />";
}
Run Code Online (Sandbox Code Playgroud)

以下是isset()与is_null()与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;
Run Code Online (Sandbox Code Playgroud)

  • 你错过了@chrislondon的观点,你没有很好地阅读我的帖子.我说我理解所有这些功能,但没有一个能够工作.我说is_undefined()如果设置为NULL则返回false,如果从未设置则返回true.一个简单的测试会显示你的函数返回false和false. (2认同)
  • 对于设置为"null"的变量,这个`is_undefined`实现不正确地返回`false`,并且对于定义的,未定义的和设置为null的变量,产生*exact*与`isset`相同的结果.`&&!is_null($ test)`部分是完全冗余的. (2认同)