三元运算符大家平常肯定不少用,但是,你真的了解三元运算符吗?
先来讲基础版本的运算符:?
表达式 (expr1) ? (expr2) : (expr3)
在 expr1 求值为 true
时的值为 expr2,在 expr1 求值为 false
时的值为 expr3。
比较简单,和字面意思一样,expr1 为真时返回 expr2,反之返回 expr3。
然后说下进化版:?: 条件运算符
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3
在 expr1 求值为 true
时返回 expr1,否则返回 expr3。
需要注意的是,当 expr1 为表达式时,返回值为结果值。例如:
$b = -3; $a = $b>0 ?: 'b is little'; //bool(true)
为变量则返回对应的变量值。
$b = 3; $a = $b ?: 'b is little'; //int 3
最后说下究极进化版:?? 合并运算符
PHP 7 开始存在 "??" (NULL 合并)运算符。主要用来作 isset 的判断。
当 expr1 为 null
,表达式 (expr1) ?? (expr2)
等同于 expr2,否则为 expr1。
使用过程中一定要先明确表达式的返回结果,要不然挖坑把自己埋了,排错都万万想不到会是一个表达式的问题。别问为啥知道的,问就是自己踩过坑。