小编典典

PHP三元运算符与空合并运算符

all

有人能解释一下PHP
三元运算符简写(
?:)
空合并运算符(
)之间的区别吗???

他们什么时候表现不同,什么时候表现相同(如果这种情况发生的话)?

$a ?: $b

VS。

$a ?? $b

阅读 112

收藏
2022-03-14

共1个答案

小编典典

当您的第一个参数为空时,它们基本相同,只是E_NOTICE当您有未定义的变量时,空合并不会输出。PHP 7.0
迁移文档
有这样的说法:

已添加空合并运算符 (??) 作为语法糖,用于需要将三元组与 isset() 结合使用的常见情况。如果存在且不为
NULL,则返回其第一个操作数;否则返回第二个操作数。

下面是一些示例代码来演示这一点:

<?php

$a = null;

print $a ?? 'b'; // b
print "\n";

print $a ?: 'b'; // b
print "\n";

print $c ?? 'a'; // a
print "\n";

print $c ?: 'a'; // Notice: Undefined variable: c in /in/apAIb on line 14
print "\n";

$b = array('a' => null);

print $b['a'] ?? 'd'; // d
print "\n";

print $b['a'] ?: 'd'; // d
print "\n";

print $b['c'] ?? 'e'; // e
print "\n";

print $b['c'] ?: 'e'; // Notice: Undefined index: c in /in/apAIb on line 33
print "\n";

有通知的行是我使用速记三元运算符而不是空合并运算符的行。但是,即使有通知,PHP 也会返回相同的响应。

执行代码:https ://3v4l.org/McavC

当然,这总是假设第一个参数是null。一旦它不再为空,那么您最终会遇到不同之处,即??运算符将始终返回第一个参数,而?:速记仅在第一个参数为真时才会返回,这取决于PHP
如何将事物类型转换为
boolean

所以:

$a = false ?? 'f'; // false
$b = false ?: 'g'; // 'g'

那么$a将等于false$b等于'g'

2022-03-14