这个问题仅供参考。
我想知道是否有办法检查变量是否为is_set,如果是,请检查它是否设置为null
基于PHP type comparison tables似乎不太可能。
例如,假设我们有这段代码:
<?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
答案 0 :(得分: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
返回键值对中的局部变量scope(包括superglobals)。
当变量为array_key_exists
时,NULL
也返回true,您可以使用它;那么你只需要检查变量NULL
是否is_null
。
答案 1 :(得分:0)
您获得正确的结果是因为当您指定
时 $x = null;
这意味着您要为$x
分配一个值,这就是条件
if(isset($x) && is_null($x)){
设置为false
,该控件转到else
部分
isset($x)
返回true
但is_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
,而且&#&# 39;为什么is_null($z)
条件变为true
。
答案 2 :(得分:0)
&安培;&安培;表示IF子句中的条件必须为true,如您在Link
中所示$ X = NULL; isset($ x)returens false和is_null($ x)返回true,因此我们可以看到其他条件执行