PHP 空值合併運算子



空值合併運算子是PHP 7中引入的眾多新特性之一。“合併”一詞意味著將許多事物合而為一。此運算子用於替換與isset()函式結合的三元運算。

PHP中的三元運算子

PHP有一個三元運算子,用“?”符號表示。三元運算子比較布林表示式,如果為真則執行第一個運算元,否則執行第二個運算元。

expr ? statement1 : statement2;

示例

讓我們使用三元運算子來檢查某個變數是否已設定,可以使用isset()函式,如果已宣告則返回true,否則返回false。

<?php
   $x = 1;
   $var = isset($x) ? $x : "not set";
   echo "The value of x is $var";
?>

它將產生以下輸出

The value of x is 1

現在,讓我們刪除“x”的宣告並重新執行程式碼:

<?php
   # $x = 1;
   $var = isset($x) ? $x : "not set";
   echo "The value of x is $var";
?>

程式碼現在將產生以下輸出

The value of x is not set

空值合併運算子

空值合併運算子用“??”符號表示。它作為一種便捷的快捷方式來使用與isset()結合的三元運算子。如果第一個運算元存在且不為空,則返回第一個運算元;否則返回第二個運算元。

$Var = $operand1 ?? $operand2;

第一個運算元檢查某個變數是否為空(或是否已設定)。如果它不為空,則返回第一個運算元,否則返回第二個運算元。

示例

請看下面的例子:

<?php
   # $num = 10;
   $val = $num ?? 0;
   echo "The number is $val";
?>

它將產生以下輸出

The number is 0

現在取消設定$num為10的第一條語句的註釋,然後重新執行程式碼:

<?php
   $num = 10;
   $val = $num ?? 0;
   echo "The number is $val";
?>

現在它將產生以下輸出

The number is 10

空值合併運算子的一個有用應用是檢查客戶端瀏覽器是否提供了使用者名稱。

示例

以下程式碼從URL讀取name變數。如果URL中確實存在name引數的值,則顯示其歡迎訊息。但是,如果沒有,則使用者被稱為訪客。

<?php
   $username = $_GET['name'] ?? 'Guest';
   echo "Welcome $username";
?>

假設此指令碼“hello.php”位於PHP伺服器的htdocs資料夾中,在URL中輸入https:///hello.php?name=Amar,瀏覽器將顯示以下訊息:

Welcome Amar

如果URL是https:///hello.php,瀏覽器將顯示以下訊息:

Welcome Guest

空值合併運算子用作三元運算子檢查isset()函式特定情況的替代。因此,以下語句給出類似的結果:

<?php
   $username = isset($_GET['name']) ? $_GET['name'] : 'Guest';
   echo "Welcome $username";
?>

現在它將產生以下輸出

Welcome Guest

您可以像下面這樣連結“??”運算子:

<?php
   $username = $_GET['name'] ?? $_POST['name'] ?? 'Guest';
   echo "Welcome $username";
?>

現在它將產生以下輸出

Welcome Guest

如果變數$name沒有透過GET或POST方法設定,這將把使用者名稱設定為訪客。

廣告