如果设置变量和is_null,如何检入PHP

时间:2013-05-16 16:45:26

标签: php isset isnull

这个问题仅供参考。

我想知道是否有办法检查变量是否为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

3 个答案:

答案 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)返回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,而且&#&# 39;为什么is_null($z)条件变为true

答案 2 :(得分:0)

&安培;&安培;表示IF子句中的条件必须为true,如您在Link

中所示

$ X = NULL; isset($ x)returens false和is_null($ x)返回true,因此我们可以看到其他条件执行