1
kiracyan 2022-02-22 21:26:26 +08:00 1
一般来说是空判断
|
2
noe132 2022-02-22 21:27:16 +08:00
Null coalescing operator
其他语言比较常见了,像 JS, C# 都有类似的 |
3
anguiao 2022-02-22 21:28:45 +08:00 3
搜“php double question mark”可以搜到,空值合并,Google 对符号关键词好像不太友好。
|
4
zhengfan2016 OP |
5
cwcc 2022-02-22 21:31:11 +08:00 1
如果 `$this->meta` 中没有 title 字段,那么本来 PHP 会报错或者置空;但是 ?? 的话,如果发生了前面取不到或者前面的值为 null 的话,就取后面的值,有点类似于 getSomething($key, $default_value),传入了一个不存在时候的默认值。
|
6
cwcc 2022-02-22 21:33:15 +08:00
$a ?? $b 的情况下,基本上是等同于 `isset($a) ? (is_null($a) ? $b : $a) : $b`
|
7
cwcc 2022-02-22 21:33:57 +08:00
哦不太对,我也忘记了,isset 好像自身就有判断是否为 null 的功能的
|
8
zhengfan2016 OP |
9
sagaxu 2022-02-22 21:39:28 +08:00
xx 语言里看不懂的运算符,那就搜 xx operator precedence ,一般会有个完整的运算符表格
|
10
sorshion 2022-02-22 21:56:10 +08:00
|
11
Removable 2022-02-22 22:40:35 +08:00 via iPhone
c#来说:
var a = b == null ? c : b; 可以写成 var a = b ?? c; |
12
wonderfulcxm 2022-02-22 22:53:50 +08:00 via iPhone
这是新的语法糖呀……
|
13
512357301 2022-02-22 23:02:16 +08:00 via Android
好像是 php7.x 某个版本还是 php8 来着新出的运算符,用来简化标准的三元运算符呢
|
14
shoaly 2022-02-22 23:30:05 +08:00
其实没什么用, 因为之前就可以 $this->title = $this->title ?: "default" , 我实在没想通 ?: 为啥要升级成 ?? , 看起来更吓人了, 语义上也没更清楚, 字符也没少敲一个
|
16
pcbl 2022-02-22 23:55:37 +08:00 via Android
可以简单理解为如果左侧表达式为 false 就取右边的值
|
18
eason1874 2022-02-23 01:17:01 +08:00 3
|
21
lisongeee 2022-02-23 10:26:19 +08:00
js 里面 a ?? b 表示 (a===null || a=== undefined) ? b : a
kotlin 里面 a ?: b 表示 a==null ? b:a 它们都有可选链,a?.b?.c 表示 a==null ? a: (a.b==null ? a.b : a.b.c) 现在很多语言的新语法,空安全基本都是标配了 |
22
xiao109 2022-02-23 13:26:12 +08:00
你直接搜 ?? 谷歌会真的当问号,你可以把两个问号换成 double question mark 。这样就会搜到了
|
23
MCyunpeng98 2022-02-24 11:21:52 +08:00
php ?? 是 php7.0 版本的新增特性
$username = $_GET['user'] ?? 'nobody'; 等于 username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; 参考链接: https://www.php.net/manual/zh/migration70.new-features.php |
24
Evilk 2022-02-24 16:18:08 +08:00
还是习惯用完整的三元运算符
|