Elvis运算符(?:)和null合并运算符(??)在PHP中:有什么区别?
大家好。我是一名初学PHP的开发者,一直弄不明白两个运算符之间的区别:短三元运算符(也叫“Elvis”)`?:` 和空合并运算符 `??`。文档里说它们很相似,但我总是搞混该用哪个。
我有这样的代码。我从表单或数据库中获取数据,想输出用户名(如果有)或“游客”(如果没有):
```php
$username = $_POST['username'] ?: '游客';
```
这样可以用,但我有时看到其他开发者这样写:
```php
$username = $_POST['username'] ?? '游客';
```
两个写法似乎做的是同一件事。但我注意到,如果 `$_POST['username']` 传来的是空字符串 `""`,第一个版本(用 `?:`)会输出“游客”,而第二个版本(用 `??`)会输出空字符串。为什么会这样?当我想检查变量是否存在且不为 `null` 时,哪个写法更合适?
再举个例子。我有一个数组,里面保存了