测试PHP中变量是否存在的最佳方法;isset()显然已损坏
从isset()
文档:
isset() will return FALSE if testing a variable that has been set to NULL.
基本上,isset()
不检查是否已设置变量,而是检查是否将其设置为NULL
。
鉴于此,实际检查变量是否存在的最佳方法是什么?我尝试了类似的东西:
if(isset($v) || @is_null($v))
(未设置@
时有必要避免警告$v
),但is_null()
有一个类似的问题isset()
:它会返回未TRUE
设置的变量!还显示:
@($v === NULL)
的工作方式与完全相同@is_null($v)
,所以也可以了。
我们应该如何可靠地检查PHP中是否存在变量?
编辑:PHP中未设置的变量与设置为的变量之间显然存在差异NULL
:
<?php$a = array('b' => NULL);
var_dump($a);
PHP表明$a['b']
存在并且具有NULL
价值。如果添加:
var_dump(isset($a['b']));var_dump(isset($a['c']));
您可以看到我在谈论该isset()
功能的含糊之处。这是所有这三个的输出var_dump()s
:
array(1) { ["b"]=>
NULL
}
bool(false)
bool(false)
进一步编辑:两件事。
一,用例。将数组转换为SQL
UPDATE
语句的数据,其中数组的键是表的列,而数组的值是要应用于每一列的值。该表的任何列都可以保存一个NULL
值,通过NULL
在数组中传递值来表示。您
需要 一种区分不存在的数组键和将数组的值设置为NULL
;的方法。这就是不更新列的值和将列的值更新为的区别NULL
。
其次,Zoredache的答案,array_key_exists()
工作正常,我上面的用例和任何全局变量:
<?php$a = NULL;
var_dump(array_key_exists('a', $GLOBALS));
var_dump(array_key_exists('b', $GLOBALS));
输出:
bool(true)bool(false)
由于可以正确处理几乎所有地方,我可以看到不存在的变量与设置为的变量之间有任何歧义NULL
,
。
(我只能想到的其他情况是针对类属性的property_exists()
,根据其文档,它的工作方式与之类似array_key_exists()
,因为它可以正确地区分未设置和被设置为NULL
。)
回答:
如果您要检查的变量位于全局范围内,则可以执行以下操作:
array_key_exists('v', $GLOBALS)
以上是 测试PHP中变量是否存在的最佳方法;isset()显然已损坏 的全部内容, 来源链接: utcz.com/qa/405596.html