null 合并运算符(??)

三元运算符经常用到,三元运算符只需一行代码就可以实现if-else的功能。如:

$post = ($_POST['title']) ? $_POST['title'] : NULL;

以上代码理想状态是对的,但是当$_POST、$_POST['title']不存在,或者为null时,PHP就会抛出 Notice: Undefined index: title in ... 错误。为了解决和这个问题,一般这样写

$post = isset($_POST['title']) ? $_POST['title'] : NULL;

这样写解决了报错的问题,但是重复书写了代码。PHP7中合并运算符,在第一个操作数存在时,可以直接返回,不然则返回第二个操作数,代码如下:

$post = $_POST['title'] ?? NULL;

合并运算符检查$_POST['title'],是否存在如果存在则返回$_POST['title'],否则返回NULL

合并运算符的另一个的好处是可以连续使用,代码如下:

$title = $_POST['title'] ?? $_GET['title'] ?? 'No POST or GET';

上面的代码执行时会先检查第一个操作符是否存在,若存在则直接返回,若不存在则检查第二个操作数。此时第二个合并操作符开始生效,它会检查第二个操作数是否存在,若存在则返回,若不存在则返回右边的值。

如果用老的代码为:

if (isset($_POST['title'])) {
    $title = $_POST['title'];
} elseif (isset($_GET['title'])) {
    $title = $_GET['title'];
} else {
    $title = 'No POST or GET';
}

Last updated