php两个问号 ??是php7新推出的表达式,
c = a ?? b;
表示如果a非空,则c = a,
如果a为空,则 c = b;
php7以前经常使用到三元运算表达式,
$page = isset($params['page']) ? $params['page'] : 1;
现在使用双问号表达式就行了
$page = $params['page'] ?? 1;
但是由于它是 isset,如果传递了空字符串,则导致 page 得到一个空字符串,如果希望为整数,且不为0,则不能使用 ?? ,而使用 ?:
$page = (int)$params['page'] ?: 1;
这里的 ?: 是php5.3的语法,也就是 $a ? $a : 1,是三元表达式的缩写。
简记: ?? 判断是否存在(不为null), ?: 判断是否为空。
一般来说,使用 ?: 赋默认值,如果允许传递空(比如 0或 空字符串),则使用 ?? 赋默认值。