如何在PHP中检查变量是否已设置且为空

如何在PHP中检查变量是否已设置且为空,php,isset,isnull,Php,Isset,Isnull,这个问题仅供参考 我想知道是否有一种方法可以检查一个变量是否被设置,如果是,检查它是否被设置为null 根据目前的情况,这似乎是不可能的 例如,假设我们有以下代码: <?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) &&

这个问题仅供参考

我想知道是否有一种方法可以检查一个变量是否被设置,如果是,检查它是否被设置为null

根据目前的情况,这似乎是不可能的

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

<?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=null

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

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

设置为
false
,控制转到
else
部分

isset($x)
返回
true
为null($x)
返回
false
,因为设置了值(无论值是否为
null
),所以
和&
返回false,控制转到
其他部分

如果是
$y

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

$y
未声明。因此
isset($y)
false
,因此控件转到
其他部分


为什么您会收到关于
$z
的消息,即
$z被设置为NULL
,因为您没有check
isset($z)
,默认情况下它是
NULL
,这就是为什么
为NULL($z)
条件变为
true
&意味着IF子句中的两个条件都必须为true,正如您在本文中所看到的

$x=null; isset($x)返回false,is_null($x)返回true,这样我们可以看到else条件执行

$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\u key\u exists
在变量为
NULL
时也返回true,因此您可以使用它;然后您只需使用
is\u NULL
检查变量是否为
NULL

我正在分配一个值,该值为NULL,这意味着
is\u NULL($x)
应返回true以及
isset($x)
因为变量已设置且值为空
$x was never initialized
$y was never initialized
$z is set to NULL
$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";
}