16

在 PHP 中,我想检查是否尚未设置/定义变量,其中设置变量 NULL 被视为 set/defined

我知道这里的一切: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 in C:\wamp\www\plm\temp4.php on line 9
$myUndefined value = ""

我想知道一个变量是否像上面通知中所说的那样是未定义的。我想要一个函数,称之为“is_undefined”,其中

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

任何人?提前致谢。

4

7 回答 7

19

我还没有使用它 - 但我认为“get_defined_vars”应该值得一看...... http://php.net/manual/en/function.get-defined-vars.php

我会试一试并转储结果。

于 2013-06-07T21:20:27.137 回答
9

我认为get_defined_vars是这样工作的好人选:

array_key_exists('myNull', get_defined_vars());

应该做你所期望的。

如果您在全局上下文中工作,您还可以使用:

array_key_exists('myNull', $GLOBALS);
于 2013-06-07T21:22:22.290 回答
7

如果你想要一个 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() 与 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;
于 2013-06-07T21:17:32.633 回答
4

你也可以使用compact()它,如果你给它的变量不在符号表中,它返回一个空数组,否则一个包含变量名称/值对的数组,只需将结果转换为布尔值

<?php

$myNull = null;

$isDefined = (bool) compact('myNull'); // true

$otherIsDefined = (bool) compact('myUndefined'); // false 
于 2013-06-07T22:38:23.513 回答
0

是的,就像上面提到的乔纳森先生一样,我们可以使用 array_key_exists() + $GLOBALS 而不是 get_defined_vars() 来识别未定义的变量为空

$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
于 2013-12-30T03:54:25.567 回答
0

如果您使用的是 OOP,那么__isset()当您尝试访问未在任何地方定义的变量时,将执行此函数的重载。例子:

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

因此,将避免任何与未定义变量相关的错误消息或通知

于 2013-06-07T21:22:29.773 回答
0

检查变量是否已定义并具有一些我们可以isset()在条件中使用的值

if(!isset($var)){}
于 2021-02-02T09:57:59.393 回答