大佬们,请问??是什么运算符

2022-02-22 21:23:51 +08:00
 zhengfan2016

如题,laravel 写的应用看到的,用谷歌搜"php ??" 或"laravel ??" 都没找到说明。 看起来有点像简化的三元运算符?

3463 次点击
所在节点    PHP
24 条回复
kiracyan
2022-02-22 21:26:26 +08:00
一般来说是空判断
noe132
2022-02-22 21:27:16 +08:00
Null coalescing operator
其他语言比较常见了,像 JS, C# 都有类似的
anguiao
2022-02-22 21:28:45 +08:00
搜“php double question mark”可以搜到,空值合并,Google 对符号关键词好像不太友好。
zhengfan2016
2022-02-22 21:28:52 +08:00
@kiracyan #1 大佬,请问$a ?? $b 是不是可以理解成

issue($a) ? $a : $b;

不知道我这个对不对 QAQ
cwcc
2022-02-22 21:31:11 +08:00
如果 `$this->meta` 中没有 title 字段,那么本来 PHP 会报错或者置空;但是 ?? 的话,如果发生了前面取不到或者前面的值为 null 的话,就取后面的值,有点类似于 getSomething($key, $default_value),传入了一个不存在时候的默认值。
cwcc
2022-02-22 21:33:15 +08:00
$a ?? $b 的情况下,基本上是等同于 `isset($a) ? (is_null($a) ? $b : $a) : $b`
cwcc
2022-02-22 21:33:57 +08:00
哦不太对,我也忘记了,isset 好像自身就有判断是否为 null 的功能的
zhengfan2016
2022-02-22 21:34:44 +08:00
@crazywhalecc #5
@anguiao #3
@noe132 #2 学习了,感谢大佬们的解答
sagaxu
2022-02-22 21:39:28 +08:00
xx 语言里看不懂的运算符,那就搜 xx operator precedence ,一般会有个完整的运算符表格
sorshion
2022-02-22 21:56:10 +08:00
Removable
2022-02-22 22:40:35 +08:00
c#来说:
var a = b == null ? c : b;
可以写成
var a = b ?? c;
wonderfulcxm
2022-02-22 22:53:50 +08:00
这是新的语法糖呀……
512357301
2022-02-22 23:02:16 +08:00
好像是 php7.x 某个版本还是 php8 来着新出的运算符,用来简化标准的三元运算符呢
shoaly
2022-02-22 23:30:05 +08:00
其实没什么用, 因为之前就可以 $this->title = $this->title ?: "default" , 我实在没想通 ?: 为啥要升级成 ?? , 看起来更吓人了, 语义上也没更清楚, 字符也没少敲一个
sadfQED2
2022-02-22 23:46:39 +08:00
@shoaly 有区别,?:会有 undefined 错误,??不会
pcbl
2022-02-22 23:55:37 +08:00
可以简单理解为如果左侧表达式为 false 就取右边的值
shoaly
2022-02-22 23:58:12 +08:00
@sadfQED2 警告关闭即可
eason1874
2022-02-23 01:17:01 +08:00
@shoaly #17 你这句话让我笑出声,想起那个笑话

一群游客路过悬崖边,所有人都安全通过,只有 PHP 程序员掉下去了,因为 PHP 程序员的习惯是无视警告(看不见警告牌)
msg7086
2022-02-23 05:29:02 +08:00
@eason1874 0 error(s)(
shoaly
2022-02-23 09:34:02 +08:00
@eason1874 偏偏....大部分框架都默认关闭了警告显示, 就留下了笑出声的你

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/835766

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX