来自isset()文档:
isset() will return FALSE if testing a variable that has been set to NULL.
Run Code Online (Sandbox Code Playgroud)
基本上,isset()不检查变量是否设置,但是否设置为除了NULL.
鉴于此,实际检查变量是否存在的最佳方法是什么?我尝试过类似的东西:
if(isset($v) || @is_null($v))
Run Code Online (Sandbox Code Playgroud)
(这@是必要的,以避免$v未设置时的警告)但is_null()有一个类似的问题isset():它返回未TRUE设置的变量!它似乎也是:
@($v === NULL)
Run Code Online (Sandbox Code Playgroud)
工作完全一样@is_null($v),所以也是这样.
我们如何可靠地检查PHP中是否存在变量?
编辑:在未设置的变量和设置为的变量之间,PHP显然存在差异NULL:
<?php
$a = array('b' => NULL);
var_dump($a);
Run Code Online (Sandbox Code Playgroud)
PHP显示$a['b']存在,并且具有NULL值.如果你添加:
var_dump(isset($a['b']));
var_dump(isset($a['c']));
Run Code Online (Sandbox Code Playgroud)
你可以看到我正在谈论的isset()功能歧义.以下是所有这三个的输出var_dump()s:
array(1) {
["b"]=>
NULL
}
bool(false)
bool(false)
Run Code Online (Sandbox Code Playgroud)
进一步编辑:两件事.
一,用例.将数组转换为SQL UPDATE语句的数据,其中数组的键是表的列,数组的值是要应用于每列的值.任何表的列都可以保存一个NULL值,通过 …