我的问题是关于is_null()
的使用。
我已经阅读过讨论is_null($x) versus null === $x的其他问题,但我更关心为什么会有is_null()
函数?
一些测试来解释我的想法:
<?php
header('Content-type: text/plain');
error_reporting(-1);
$test = 'Hello, World!';
$test2 = null;
$test3 = '';
var_dump(is_null($test));
var_dump(null === $test);
var_dump(isset($test));
var_dump(is_null($test2));
var_dump(null === $test2);
var_dump(isset($test2));
var_dump(is_null($test3));
var_dump(null === $test3);
var_dump(isset($test3));
var_dump(is_null($test4));
var_dump(null === $test4);
var_dump(isset($test4));
将产生以下输出:
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)
bool(false)
bool(true)
Notice: Undefined variable: test4 in C:\home\ombrelle.co.uk\templates_core\test.php on line 22
bool(true)
Notice: Undefined variable: test4 in C:\home\ombrelle.co.uk\templates_core\test.php on line 23
bool(true)
bool(false)
正如您所看到的,当使用is_null()
函数或比较方法时,它会发出通知,因此您不得不使用isset()
。所以,从来没有看到使用这些方法的通知的唯一方法是它不是null
?
还要考虑以下事项:
<?php
header('Content-type: text/plain');
error_reporting(-1);
var_dump((is_null($test1)) ? 'test1' : $test);
var_dump((null == $test2) ? 'test2' : $test);
var_dump((isset($test3)) ? 'test3' : $test);
给出以下输出:
Notice: Undefined variable: test1 in C:\home\ombrelle.co.uk\templates_core\test.php on line 6
string(5) "test1"
Notice: Undefined variable: test2 in C:\home\ombrelle.co.uk\templates_core\test.php on line 7
string(5) "test2"
Notice: Undefined variable: test in C:\home\ombrelle.co.uk\templates_core\test.php on line 8
NULL
在三元声明中,上述工作仍有通知,但现在的isset()
方法根本不会工作。如果没有显示通知,怎么会这样做呢?
毕竟,我只是接受通知是没有意义的,不应该发送到我的错误日志,或者是否还有其他需要注意的警告?
我们目前正在清理一个有很多错误的旧系统 - 我们不想错过任何错误,但也没有必要为自己创造更多错误。任何有关此事的权威性阅读的链接也非常感谢。
答案 0 :(得分:2)
is_null()
查找变量是否为NULL
您确实需要isset()
来确定变量是否已设置且不是NULL。如果变量存在且返回值TRUE
,则返回NULL
,否则返回FALSE
。
例如,
$something = null; then isset($something) returns false
$something = 'some value'; then isset($something) returns true
答案 1 :(得分:0)
我能想到的唯一区别(除了速度慢 - 就像你发布的链接答案中的答案一样),is_null
允许使用horrible @
operator:
<?php
error_reporting(E_ALL);
var_dump($foo === null); //Notice
var_dump(@is_null($foo)); //No notice
?>
也就是说,如果您不确定变量是否存在,则应使用isset
而不是is_null
。
最重要的是,您可能对Best way to test for a variable's existence in PHP; isset() is clearly broken
感兴趣