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://127.0.0.1/hello.php?name=Amar,浏览器将显示以下消息:

Welcome Amar

如果URL是https://127.0.0.1/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方法设置,这将把用户名设置为访客。

广告