【PHP7.4】PHP的新运算符??=是什么?
在2019年01月22日(日本标准时间)发生了一个神秘的合并,名为Implement ??=操作符。
RFC (Request for Comments)是一种用于制定互联网标准的文件。
RFC已以37票赞同、4票反对的压倒性多数通过了。
另外,投票开始日期为2016年03月24日,结束日期为2016年04月02日。换句话说,这意味着它被忽视了近3年。
“??” 是什么意思?
RFC中称之为“Null Coalescing Assignment Operator”。
似乎没有合适的日语词汇,但可以通过推导自“NULL合体演算子”(Null Coalescing Operator)的方式,称之为“NULL合体代入演算子”吗?
这个运算符类似于将null合并运算符和赋值运算符结合在一起的操作符。
如何使用
// NULL合体代入演算子
$id ??= getId();
// これと同じ
$id = $id ?? getId();
$id = @$id ?: getId();
$id = isset($id) ? $id : getId();
是的,NULL合体代入演算子是省略了三个运算符(三項演算子、エルビス演算子和NULL合体演算子)的简写形式。
在上述例子中可能无法感受到太多好处,但对于左边倾向于较长的框架来说,优点将更多。
在RFC的示例中有以下的例子。
// これまで
$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value';
// 今後
$this->request->data['comments']['user_id'] ??= 'value';
这确实很方便。
嗯?
引导
将在PHP 7.4中引入。
他在语言上的实施
据报道,C# 8.0将于2019年发布。
在Ruby中,具有自赋值运算符“||=”的习惯用法与“||”有着相似的行为(如果左侧为nil或false,则赋值右侧的值。由于包含了false,因此严格来说是不同的行为)。
在其他语言中完全找不到。
印象
我认为这是一种源自Web的PHP操作符,用于表示不确定是否会有数据输入。
如果在其他语言中,可能会要求更明确地定义输入,但在Web API等情况下,我们不能这样说。
但是,对于是否想要使用它自己来说,有点微妙。
已经有很多缩写语法了,如果再增加的话可能会更加混乱。
嗯,像?:和??之类的我也不知不觉地经常使用,所以说,将来可能也会变成正常使用??=吧。
不过<=>我没有使用的机会。