正确使用 PHP 双问号(??) 操作符,或者 null 合并运算符

由于日常使用中存在大量同时使用三元表达式和 isset() 的情况, 我们添加了 null 合并运算符 (??) 这个语法糖。如果变量存在且值不为 NULL, 它就会返回自身的值,否则返回它的第二个操作数。

<?PHP
// Fetches the value of $_GET ['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET ['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET ['user']) ? $_GET ['user'] : 'nobody';

// Coalesces can be chained: this will return the first
// defined value out of $_GET ['user'], $_POST ['user'], and
// 'nobody'.
$username = $_GET ['user'] ?? $_POST ['user'] ?? 'nobody';
?>

假如我们遇到这样一个需求, 如果用户有手机号展示手机号,否则展示昵称。
$phone and $nickname

  1. 假如 $phone = null $nickname = "dcfei", 展示与我们预期的一样
    $phone = null;
    $nickname = "dcfei"
    $show = $phone ?? $nickname // dcfei
  2. 假如 $phone = """ $nickname = "dcfei", 展示就有问题了
    $phone = "";
    $nickname = "dcfei"
    $show = $phone ?? $nickname // ""

    所以 PHP 官方提供的例子才是 ?? 正确的使用方式。

发表评论