简单的问题:在PHP中,是VAR设置为null一样不确定的?
此外,什么是检查是无功无效简单的方法?
如何使用此功能,而不会破坏代码,例如。 通过设置在东西可以被设置为配置阵列可选null
。
如果支票null
与is_null
如果没有定义VAR它可能会破坏代码。
is_null
是完全相反的isset
,但只有且仅当您确定VAR是指可以使用。 富勒所有其他案件看起来是isset
更合适。
并检查null
, isset
是unapropriate, 是吗 ?
所以VAR可以是:
- 未定义
- 空值
- 空
- 与内容检查与
is_*
功能( numeric
, string
, array
,...)
VAR设置为NULL是不一样的定义。
<?php
if (is_null($undefinedvariable)) {
echo 'This variable is NULL';
}
此代码演示混乱可如何产生的,因为这将导致消息“该变量是NULL”被显示在,但它也将产生一个“未定义的变量”的通知。 (假设$ undefinedvariable实际上是不确定的,当然!)
当质疑这一点,我经常提到这个网站:
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
。 因为你正在寻找的是数据,没有数据没有数据。
在这个网页它看起来不完全一样,但就像它。
去检查:
- 未定义:
!(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。
要检查空:
$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
)
)
);