is_null()有什么意义?

时间:2014-03-03 10:45:54

标签: php error-reporting notice

我的问题是关于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()方法根本不会工作。如果没有显示通知,怎么会这样做呢?

毕竟,我只是接受通知是没有意义的,不应该发送到我的错误日志,或者是否还有其他需要注意的警告?

我们目前正在清理一个有很多错误的旧系统 - 我们不想错过任何错误,但也没有必要为自己创造更多错误。任何有关此事的权威性阅读的链接也非常感谢。

2 个答案:

答案 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
?>

DEMO

也就是说,如果您不确定变量是否存在,则应使用isset而不是is_null

最重要的是,您可能对Best way to test for a variable's existence in PHP; isset() is clearly broken

感兴趣