NULL合并操作符和三元运算符简化

最近在学习Laravel,然后发现了一行代码

$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)

?? 之前并没有见过
我心想,不应当,PHP里不应当有我不懂的东西,于是开始面向百度编程。
输入 ??
然后搜索出一堆问号表情包,此时我的内心:

??

好在皇天不负有心人,让我在PHP手册里找到了这玩意,叫做NULL合并操作符,以及一个三元运算符的简化写法。

NULL 合并操作符

从左往右第一个存在且不为 NULL 的操作数。如果都没有定义且不为 NULL,则返回 NULL。PHP7开始提供。

手册说明感觉不太好理解,我的理解是:
返回从左往右第一个不为 NULL 的操作数,如果全为NULL,则返回NULL。

示例代码

$a = $b ?? 'cc';
var_dump($a); //'cc'

$a = null ?? null ?? 'aa';
var_dump($a); //'aa'

这个操作符可以避免操作未定义变量时产生的警告。
用来检查参数还挺好用。

$username = trim($_POST['username'] ?? exit('username is required!'));

三元运算符简化

示例代码

$a = 'a';
$b = $a ?: 'b';
var_dump($b); //'a'