PHP - Null 合并运算符



Null 合并运算符是 PHP 7 中引入的众多新功能之一。“合并” 这个词的意思是将许多事物合二为一。此运算符用于替换与 isset() 函数的三元运算。

PHP 三元运算符

PHP 有一个由“?”符号表示的三元运算符。三元运算符比较布尔表达式,如果第一个操作数为 true,则执行第一个操作数,否则执行第二个操作数。


 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

Null 合并运算符

Null 合并运算符由 “??” 符号表示。它是将三元与 isset() 结合使用的便捷快捷方式。如果它存在且不为 null,则返回其第一个操作数;否则,它将返回其第二个操作数。


 $Var = $operand1 ?? $operand2;

第一个操作数检查某个变量是否为 null(或是否设置)。如果不为 null,则返回第一个操作数,否则返回第二个操作数。

请看下面的例子 -


<?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

Null 合并运算符的一个有用应用是检查客户端浏览器是否提供了用户名。

以下代码从 URL 中读取 name 变量。如果 URL 中确实有 name 参数的值,则会显示他的欢迎消息。但是,如果不是,则用户称为 Guest。


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

假设这个脚本 “hello.php” 在 PHP 服务器的 htdocs 文件夹中,在 URL 中输入 http://localhost/hello.php?name=Amar,浏览器会显示如下消息 -

Welcome Amar

如果 http://localhost/hello.php 是 URL,则浏览器将显示以下消息 -

Welcome Guest

Null 合并运算符用于替代三元运算符检查 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 未通过 GETPOST 方法设置,这会将用户名设置为 Guest