三元運算,即第一個表達式作為判斷條件,在后面兩個表達式中選擇一個執行。若判斷成立,則執行第二個表達式,否則執行第三個表達式。查資料時候,看到好多網友都說的不太全面或者不清不楚,所以這里整理並簡單記錄一波
整理如下
1. (expr1)?(expr2):(expr3);
=> 表達式1 ? 表達式2 : 表達式3
=> 如果條件“expr1”成立,則返回“expr2”,否則返回“expr3”。
$number = 100;
$msg = $number > 0 ? '大於0' : '不大於0';
echo $msg;//大於0
2. (expr1)?:(expr2);
=> 這個是php5.3開始才有的功能
=> 如果條件“expr1”成立,則返回“expr1”,否則“expr2”。
<?php
$number = 100;
$msg = $number ?: '不大於0';
echo $msg;//100
3. (expr1)??(expr2);
=> 這個是php7開始才有的功能
=> 又叫空合並運算符,相當於 isset(expr1) ? expr1 : expr2;
=> 如果條件“isset(expr1)”成立,則執行語句“expr1”,否則執行“expr2”。
=> 鏈式:(expr1)?? (expr2) ?? (expr3);
特別注意第3點
它只能判斷是否為null,而0/false/空數組都認為有值的!
<?php
// 一般形式
$msg1 = $number ?? '未設置該變量';
echo $msg1;//'未設置該變量'
$number = 100;
$msg2 = $number ?? '未設置該變量';
echo $msg2;//100
// 鏈式
$msg3 = $number1 ?? $number2 ?? '未設置該變量';
echo $msg3;//未設置該變量 //沒有賦值都是null,所以返回'未設置該變量'
$number1 = 100;//即使是0/false/空數組都認為有值的!
$msg3 = $number1 ?? $number2 ?? '未設置該變量';
echo $msg3;//100 //執行到第一步就得到結果,所以返回100