我的问题是关于is_null()
.
我读过其他讨论is_null($x) 与 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()
方法现在根本不起作用。如果不显示通知,如何正确处理此问题?
毕竟,我是否只是接受通知是毫无意义的,不应该发送到我的错误日志中,还是我应该考虑其他任何警告?
我们目前正在清理一个有很多错误的旧系统——我们不想错过任何一个,但也没有必要为自己制造更多错误。任何链接到有关此事的权威阅读也非常感谢。