企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
# 三元运算 **(expr1) ? (expr2) : (expr3);** 在expr1求值为 **`TRUE`** 时的值为expr2,在expr1求值为 **`FALSE`** 时的值为expr3 ``` <pre class="calibre10">``` $a<span class="token1">=</span><span class="token1">-</span><span class="token6">1</span><span class="token3">;</span> $c<span class="token1">=</span>$a<span class="token1">></span><span class="token6">0</span><span class="token1">?</span><span class="token2">'a'</span><span class="token3">:</span><span class="token2">'b'</span><span class="token3">;</span><span class="token">//$c=($a>0?'a':'b');</span> echo $c<span class="token3">;</span> ``` ``` **expr1 ?: expr3** 自 PHP 5.3 起,可以省略三元运算符中间那部分。在expr1求值为 **`TRUE`** 时返回expr1,否则返回expr3。 **(expr1) ?? (expr2)** PHP 7 开始存在 "??" (NULL 合并)运算符。 当expr1为 **`NULL`** 或不存在时值为expr2,否则为expr1。 > 尤其要注意,当不存在左侧的值时,此运算符也和[isset()](https://www.php.net/manual/zh/function.isset.php)一样不会产生警告。 对于 array 键尤其有用 ``` <pre class="calibre17">``` <span class="token">// NULL 合并运算符的例子</span> $action <span class="token1">=</span> $_POST<span class="token3">[</span><span class="token2">'action'</span><span class="token3">]</span> <span class="token1">?</span><span class="token1">?</span> <span class="token2">'default'</span><span class="token3">;</span> <span class="token">// 以上例子等同于于以下 if/else 语句</span> <span class="token5">if</span> <span class="token3">(</span><span class="token4">isset</span><span class="token3">(</span>$_POST<span class="token3">[</span><span class="token2">'action'</span><span class="token3">]</span><span class="token3">)</span><span class="token3">)</span> <span class="token3">{</span> $action <span class="token1">=</span> $_POST<span class="token3">[</span><span class="token2">'action'</span><span class="token3">]</span><span class="token3">;</span> <span class="token3">}</span> <span class="token5">else</span> <span class="token3">{</span> $action <span class="token1">=</span> <span class="token2">'default'</span><span class="token3">;</span> <span class="token3">}</span> ``` ```