资讯专栏INFORMATION COLUMN

一个神奇的操作符即将加入PHP

izhuhaodev / 3048人阅读

摘要:虽然是一个比较操作符,确实一个赋值操作符号。从实际的工程经验上来说,这个操作符确实能简化判断。这也不是第一个三个字符组成的操作符除此之外还有。

我在翻看 PHP 的 RFC 列表的时候发现了一篇不算新的,但很有意思的 rfc:空合并赋值操作符 (姑且就这么翻译吧)。

它会引起我的注意的还有一个原因是我之前写过这样一篇文章:两行代码给 PHP7 添加一个“非空合并”语法糖,里面讲的是添加一个 ??: 操作符的方法, 而现在要讲的这个,已经被接受的 rfc 里添加的操作符是: ??=

由于这个事情本身可说的不多,这里就根据 rfc 简单描述一下吧。以下部分是 rfc 的翻译。


合并赋值操作符在上世纪七十年代就出现了,最早是在 C 语言里,比如 $x = $x + 3 可以被简写为 $x += 3。随着 PHP 成为一门专注于 Web 的语言,?? 操作符经常会被用去检查变量是否存在:比如:

$username = $_GET["user"] ?? "nobody";

但是由于大部分情况下变量的名称回避 $username 长很多,所以在使用 ?? 检查后讲变量本身赋值给自己的时候会需要些一些重复的代码,形如以下形式:

 $this->request->data["comments"]["user_id"] = $this->request->data["comments"]["user_id"] ?? ‘value’;

这就是为什么需要一个能在自我赋值的时候进行空合并检查的赋值操作符的原因。

虽然 ?? 是一个比较操作符,??= 确实一个赋值操作符号。如果左值为 null,右值会被赋给左值,否则不做任何操作。

// 下面这一行有相同的效果
$this->request->data["comments"]["user_id"] = $this->request->data["comments"]["user_id"] ?? "value";
// 使用新操作符替代重复的代码
$this->request->data["comments"]["user_id"] ??= "value";

用简单描述就是:左值为空时复制右值。


从实际的工程经验上来说,这个操作符确实能简化判断。这也不是第一个三个字符组成的操作符(除此之外还有 <<=>>====!==)。

这个操作符并没有出现在 PHP7.1 中,因为 rfc 提出来的时候已经 7.1 已经是 beta3 了,而新特性需要在 beta1 时就冻结,所以在 7.2 中应该就可以用上它了。

既然说到简化重复的代码,??= 都已经来了,??: 还会远吗 ? 。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22196.html

相关文章

  • PHP下如何优雅使用Docker来构建环境(二)

    摘要:指令这条命令是指明最后容器需要暴露哪些端口号,这样其他系统才能使用这个端口。但是灵活性不高,后面我在编排的时候会教大家用编排来统一开发环境。更多还有更多指令大家看下官方文档,我自己觉得上面的指令算是使用比较多的了。 前言 上一篇文章呢,我们简单的了解了Docker的基本命令,这篇文章呢,我们来了解下Dockerfile这个文件。 一个神奇的文件:Dockerfile 我不知道有多少同学...

    longshengwang 评论0 收藏0
  • PHP下如何优雅使用Docker来构建环境(二)

    摘要:指令这条命令是指明最后容器需要暴露哪些端口号,这样其他系统才能使用这个端口。但是灵活性不高,后面我在编排的时候会教大家用编排来统一开发环境。更多还有更多指令大家看下官方文档,我自己觉得上面的指令算是使用比较多的了。 前言 上一篇文章呢,我们简单的了解了Docker的基本命令,这篇文章呢,我们来了解下Dockerfile这个文件。 一个神奇的文件:Dockerfile 我不知道有多少同学...

    jollywing 评论0 收藏0
  • XK-Note - 一个集各种神奇功能云笔记

    摘要:一个集各种神奇功能的云笔记前言博主是个计科的大学生,所以经常需要将一些不太理解的代码或者经验记录下来,纸质笔记对一些经验还好,一旦涉及代码。。。简介一个由上方代码组成,集各种神奇功能的云笔记。还有多种神奇的功能等待你的发掘。 XK-Note 一个集各种神奇功能的云笔记 showImg(https://segmentfault.com/img/remote/146000001908068...

    muddyway 评论0 收藏0
  • CNCF里程碑:超过375家会员

    摘要:跨越大关是基金会的一个不可思议的里程碑,特别是在我们的最终用户社区中有超过家组织。提供日本长期运行的首要解决方案,这是移动商务安全部署的关键推动因素。 基金会达到会员里程碑,包括Booz Allen、爱立信和SimpleNexus在内的59家组织加入支持 showImg(https://segmentfault.com/img/bVbpJJq); 加利福尼亚半月湾 - 2019年3月1...

    CntChen 评论0 收藏0
  • CNCF里程碑:超过375家会员

    摘要:跨越大关是基金会的一个不可思议的里程碑,特别是在我们的最终用户社区中有超过家组织。提供日本长期运行的首要解决方案,这是移动商务安全部署的关键推动因素。 基金会达到会员里程碑,包括Booz Allen、爱立信和SimpleNexus在内的59家组织加入支持 showImg(https://segmentfault.com/img/bVbpJJq); 加利福尼亚半月湾 - 2019年3月1...

    boredream 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<