文章目录
- 快速掌握
-
- [?: 短三元运算符](#?: 短三元运算符)
- [?? NULL 合并运算符](#?? NULL 合并运算符)
- 附上官方文档查阅方式
快速掌握
?: 短三元运算符
?: 称之为短三元运算符,它是我们熟悉的三元运算符(也叫做条件运算符)的一种特殊写法,也就是省略了三元运算符中间的部分。
-
复习一下三元表达式的语法:
(expr1) ? (expr2) : (expr3)
在 expr1 求值为 true 时的值为 expr2,在 expr1 求值为 false 时的值为 expr3。
php<?php // 三元运算符的例子 $action = (empty($_POST['action'])) ? 'default' : $_POST['action']; // 以上等同于以下的 if/else 语句 if (empty($_POST['action'])) { $action = 'default'; } else { $action = $_POST['action']; } ?>
-
省略三元运算符中间部分的语法:
expr1 ?: expr3
如果 expr1 求值为 true 时返回 expr1 的结果,否则返回 expr3(expr1 在这里仅执行一次)。
php<?php echo 0 ?: 1 ?: 2 ?: 3, PHP_EOL; //1 echo 0 ?: 0 ?: 2 ?: 3, PHP_EOL; //2 echo 0 ?: 0 ?: 0 ?: 3, PHP_EOL; //3 ?>
?? NULL 合并运算符
?? 语法:(expr1) ?? (expr2)
当 expr1 为 null,表达式 (expr1) ?? (expr2) 等同于 expr2,否则为 expr1。
下面是设置默认值的示例:
php
<?php
// NULL 合并运算符的例子
$action = $_POST['action'] ?? 'default';
// 以上例子等同于于以下 if/else 语句
if (isset($_POST['action'])) {
$action = $_POST['action'];
} else {
$action = 'default';
}
?>
-
null 合并运算符的优先级较低。
这意味着如果将它与其它运算符(比如字符串链接或者算术运算符)混合使用,可能需要括号。请看下面的示例:
php<?php // $name 未定义,引发警告。 print 'Mr. ' . $name ?? 'Anonymous'; // 打印 "Mr. Anonymous" print 'Mr. ' . ($name ?? 'Anonymous'); ?>
-
嵌套 NULL 合并运算符的示例:
php<?php $foo = null; $bar = null; $baz = 1; $qux = 2; echo $foo ?? $bar ?? $baz ?? $qux; // 输出 1 ?>
附上官方文档查阅方式
- 在线文档链接
php.net 比较运算符,打开网页后Ctrl+F
搜索 ?: 或者 ?? - 离线文档
依次打开目录节点:目录 -> PHP 手册 -> 语言参考 -> 运算符 -> 比较运算符,同样Ctrl+F
搜索 ?: 或者 ??