1

这个问题仅供参考。

我想知道是否有办法检查变量是否为 is_set,如果有,请检查它是否设置为 null

基于PHP 类型比较表似乎不可能。

例如,假设我们有以下代码:

<?php
$x = null;
if(isset($x) && is_null($x)){
    echo '$x is set to NULL';
}else{
    echo '$x was never initialized';
}
echo "\n";
if(isset($y) && is_null($y)){
    echo '$y is set to NULL';
}else{
    echo '$y was never initialized';
}
echo "\n";
if(is_null($z)){
    echo '$z is set to NULL';
}else{
    echo '$z was never initialized';
}

?>

我希望页面显示:

$x is set to NULL
$y was never initialized
$z is set to NULL   <it should give an E_NOTICE>

但我得到

$x was never initialized
$y was never initialized
$z is set to NULL
4

3 回答 3

2
$variablename_to_check_against = "varname";
$vars = get_defined_vars();
if (array_key_exists($variablename_to_check_against, $vars) && is_null($$variablename_to_check_against)) {
    echo "$variablename_to_check_against is NULL and exists";
}

get_defined_vars返回键值对中的局部变量范围(包括超全局变量)。

array_key_exists变量为 时返回 true NULL,您可以使用它;那么您只需要检查变量是否NULLis_null.

于 2013-05-16T17:01:30.013 回答
0

你得到正确的结果,因为当你分配

$x = null;

这意味着您正在分配一个值$x,这就是为什么一个条件

if(isset($x) && is_null($x)){

设置为,这false就是控制权else

isset($x)返回trueis_null($x)返回false,因为值已设置(无论是否null),因此&&返回 false 并且控制权转到else部分。

的情况下$y

if(isset($y) && is_null($y)){

$y未声明。isset($y)也是如此false,因此控制权会else分道扬镳。

以及为什么您收到有关此消息的原因$z$z is set to NULL因为您没有检查isset($z),并且null默认情况下是检查,这就是is_null($z)条件变为true.

于 2013-05-16T16:55:16.170 回答
0

&& 表示 IF 子句中的两个条件都必须为真,如您在此链接中所见

$x=空;isset($x) 返回 false 并且 is_null($x) 返回 true 所以我们可以看到 else 条件执行

于 2013-05-16T17:00:10.900 回答