简单的问题:在php中,var是否设置为null与undefined相同?
另外,最简单的检查方法是var null?
如何在不破坏代码的情况下使用此功能,例如。通过在配置数组中设置可选设置为null
的可选项。
如果使用null
检查is_null
,如果未定义var,则可能会破坏代码。
is_null
与isset
完全相反,但只能在您确定已定义var的情况下使用。对于其他所有案例,isset
更合适。
要检查null
,isset
是不合适的,是吗?
所以var可以是:
is_*
函数核对的内容(numeric
,string
,array
,...)答案 0 :(得分:1)
var设置为NULL与undefined不同。
<?php
if (is_null($undefinedvariable)) {
echo 'This variable is NULL';
}
此代码演示了如何产生混淆,因为它将导致显示消息“此变量为NULL”,但它也会生成“未定义变量”通知。 (假设$ undefinedvariable当然是未定义的!)
答案 1 :(得分:0)
在this页面中,它看起来不一样,但表现得像它一样。
检查:
!(isset($var) || array_key_exists('var',get_defined_vars())))
array_key_exists('var', get_defined_vars()) && is_null($var)
isset($var) && empty($var)
isset($var) && !empty($var)
+任何其他if_ *具体。要对我的配置数组进行相同的检查get_defined_vars()
我只使用$configArr
,它可以用于任何其他数组,如过滤后的POST。
检查null:
$configArr = array('var' => null);
$isNull = array_key_exists('var', $configArr) && is_null($configArr['var']);
实施例
Array
(
[str] => Array
(
[isset] => TRUE
[is_null] => FALSE
[empty] => FALSE
[array_key_exist] => TRUE
[array_key_exist + is_null] => FALSE
)
[empty] => Array
(
[isset] => TRUE
[is_null] => FALSE
[empty] => TRUE
[array_key_exist] => TRUE
[array_key_exist + is_null] => FALSE
)
[null] => Array
(
[isset] => FALSE
[is_null] => TRUE
[empty] => TRUE
[array_key_exist] => TRUE
[array_key_exist + is_null] => TRUE
)
[undefined] => Array
(
[isset] => FALSE
[is_null] => TRUE
[empty] => TRUE
[array_key_exist] => FALSE
[array_key_exist + is_null] => FALSE
)
)
最终结果:
$pRes = (!array_key_exists('var', $arrayOfVars)
? 0 // undefined
: (is_null($arrayOfVars['var'])
? 1 // -> null
: (empty($arrayOfVars['var']
? 2 // -> empty
: 3 // -> custom
)
)
);
答案 2 :(得分:0)
在质疑这个问题时,我经常提到这个网站:
https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/
它将为您提供所有等效项的列表以及它们的真实性。
(undefined $var) == !isset($var) == empty($var) == is_null($var)
(var $var;) == !isset($var) == empty($var) == is_null($var)
($var = NULL) == !isset($var) == empty($var) == is_null($var)
所以,是的,两者是等价的。
你的问题的其余部分变得复杂(在IDEOne中):
<table><tr><td>Key</td><td>array_key_exists()</td><td>isset()</td><td>empty()</td><td>is_null()</td></tr><tr><td>$array['null']</td><td>true</td><td>false</td><td>true</td><td>true</td></tr><tr><td>$array['empty']</td><td>true</td><td>true</td><td>true</td><td>false</td></tr><tr><td>$array['zero']</td><td>true</td><td>true</td><td>true</td><td>false</td></tr><tr><td>$array['space']</td><td>true</td><td>true</td><td>false</td><td>false</td></tr><tr><td>$array['character']</td><td>true</td><td>true</td><td>false</td><td>false</td></tr><tr><td>$array['true']</td><td>true</td><td>true</td><td>false</td><td>false</td></tr><tr><td>$array['false']</td><td>true</td><td>true</td><td>true</td><td>false</td></tr><tr><td>$array['undefined']</td><td>false</td><td>false</td><td>true</td><td>true</td></tr></table>
如果要进行隐式检查,则必须进行组合:
if(array_key_exists($key, $array) {
$check = $array[$key];
if($check === NULL) {
// set and null
} elseif ($check === FALSE) {
// set and FALSE
} elseif ( /** additional checks, etc, etc... **/ ) { }
} else {
// Not set
}
不幸的是,如果变量不在数组中,没有'get_defined_vars()`就不可能做到这一点,我强烈反对在生产代码中使用它,因为它会因为非引用数据而占用内存(对象将通过引用表示,但这将复制所有其他变量,导致内存急剧增加。)
简单地考虑undefined == !isset == NULL == empty
是一种很好的编码习惯。因为你要找的是数据,没有数据就没有数据。