2

我的问题是关于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()方法现在根本不起作用。如果不显示通知,如何正确处理此问题?

毕竟,我是否只是接受通知是毫无意义的,不应该发送到我的错误日志中,还是我应该考虑其他任何警告?

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

4

2 回答 2

2

is_null()查找变量是否为 NULL

您确实需要isset()确定变量是否已设置且不为 NULL。TRUE如果变量存在并且具有除 以外的值,则返回NULL,否则返回FALSE

例如,

$something = null; then isset($something) returns false
$something = 'some value'; then isset($something) returns true
于 2014-03-03T10:48:29.740 回答
0

我能想到的唯一区别(除了速度较慢 - 就像您发布的链接答案中的答案)是is_null允许使用可怕的@运算符

<?php
    error_reporting(E_ALL);

    var_dump($foo === null); //Notice
    var_dump(@is_null($foo)); //No notice
?>

演示

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

最重要的是,您可能对在 PHP 中测试变量是否存在的最佳方式感兴趣;isset() 明显坏了

于 2014-03-03T10:49:22.637 回答