小编典典

当您的第一个参数为null时,它们基本相同,不同之处在于,E_NOTICE当您有未定义的变量时,null合并不会输出。在PHP7.0迁移的文档有这样一段话:

对于需要将三元数与isset()结合使用的常见情况,已将空合并运算符(??)添加为语法糖。如果它存在且不为NULL,则返回其第一个操作数;否则返回第一个操作数。否则返回第二个操作数。

这是一些示例代码来演示这一点:

$a = null;

print $a ?? 'b'; // b

print "\n";

print $a ?: 'b'; // b

print "\n";

print $c ?? 'a'; // a

print "\n";

print $c ?: 'a'; // Notice: Undefined variable: c in /in/apAIb on line 14

print "\n";

$b = array('a' => null);

print $b['a'] ?? 'd'; // d

print "\n";

print $b['a'] ?: 'd'; // d

print "\n";

print $b['c'] ?? 'e'; // e

print "\n";

print $b['c'] ?: 'e'; // Notice: Undefined index: c in /in/apAIb on line 33

print "\n";

注意的行是我使用速记三元运算符而不是空合并运算符的行。但是,即使有此通知,PHP也会给出相同的响应。

当然,这总是假设第一个参数是null。一旦它不再为null,则最终会出现以下差异:??运算符将始终返回第一个参数,而?:简写方式只有在第一个参数为true时才返回,并且这取决于PHP如何将内容类型转换为布尔值。

所以:

$a = false ?? 'f'; // false

$b = false ?: 'g'; // 'g'

则将$a等于false和$b等于'g'。

2020-05-26

php 三元运算符 为空,PHP三元运算符vs空合并运算符相关推荐

  1. php 三元运算符 为空,PHP中三元运算符和Null合并运算符的简单比较

    在PHP中,三元运算符(?:)和Null合并运算符(??)的用法相似,那么它们之间有什么差异?下面本篇文章就来带大家了解一下三元运算符和Null合并运算符,希望对大家有所帮助. 三元运算符 三元运算符 ...

  2. PHP三元运算符vs空合并运算符

    本文翻译自:PHP ternary operator vs null coalescing operator Can someone explain the differences between t ...

  3. JAVA语言运算符(算数运算符、赋值运算符、比较运算符、逻辑运算符、三元运算)

    运算符 JAVA语言中将运算符分为:算数运算符.赋值运算符.比较运算符.逻辑运算符.三元运算符. 算数运算符:算数运算符是对数字进行一系列的加减乘除等的计算,常见的算数运算符如: public cla ...

  4. 前端:JS/18/JS运算符(算术运算符,赋值运算符,字符串运算符,比较运算符,逻辑运算符,三元运算符),window.prompt()

    JS运算符 要进行各种各样的运算,就要使用不同的运算符号. 1,算术运算符:+ - * / % ++ -- + :加法运算符 - :减法运算符 * :乘法运算符 / :除法运算符 % :取余运算符,返 ...

  5. php 三元运算?:和合并运算符??

    三元运算符 表达式 (expr1) ? (expr2) : (expr3) 在 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3. < ...

  6. C# 空合并运算符 ??

    C#语言中,??运算符称为空合并运算符: a??b形式的空合并表达式要求a为可以为null的类型或引用类型.如果a为非null,则a??b的结果为a:否则,结果为b.仅当a为null时,该操作才计算b ...

  7. php null运算符,PHP7 Null合并运算符

    在PHP7,一个新的功能,空合并运算符(??)已被引入.它被用来代替三元运算并与 isset()函数功能结合一起使用.如果它存在并且它不是空的,空合并运算符返回它的第一个操作数;否则返回第二个操作数. ...

  8. C++primer 第 4 章 表达式 4.1基础 4 . 2 算术运算符 4 .3 逻辑和关系运算符 4 . 4 赋值运算符 4 .5 递增和递减运算符 4.6成员访问运算符

    表达式由一个或多个运算对象(operand)组成,对表达式求值将得到一个结果(result) 字面值和变量是最简单的表达式(expression),其结果就是字面值和变量的值.把一个运算符(opera ...

  9. 【ES11(2020)】可选链操作符和空值合并运算符

    可选链操作符 Optional chaining 可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效.?.操作符的功能类似于.链式操作符,不同之处在于, ...

最新文章

  1. 原生js实现点击按钮切换全屏!
  2. Oracle笔记 八、PL/SQL跳转/判断/循环语句块
  3. Codeforces 671D. Roads in Yusland(树形DP+线段树)
  4. 程序员应如何理解高并发中的协程
  5. Swift中文教程(十二) 下标
  6. linux c 获取硬盘使用率,Linux通过c得到硬盘使用情况
  7. ANT自动化压缩合并JS/CSS和更改版本号
  8. Python批量下载XKCD漫画只需20行命令!
  9. PDF转DWG格式怎么转?分享两种好用转换方法
  10. openwrt安装aria2
  11. Factory IO的应用(一)
  12. 【VR】详解 Facebook Oculus团队的手势追踪系统——MegaTrack
  13. 一文带你走进网络编程
  14. 小米平板4 android版本,小米平板4-4plus
  15. linux系统桌面环境选择,你应该选择Cinnamon作为Linux桌面环境的十个理由
  16. 图灵对计算机行业的贡献论文,这届图灵奖得主究竟做了什么贡献?这篇1974年的论文给了我们答案...
  17. 【精通内核】Linux内核自旋锁实现原理与源码解析
  18. Power BI 可视化:KPI 指标在卡片图中的突出显示
  19. Android多国语言翻译 字符串目录详解
  20. [教师资格证-中学笔试-裸考过关]教育知识与能力必背知识点(技巧)

热门文章

  1. VirtualBox压缩VDI文件 VDI文件瘦身方法(cenos7)
  2. Android-手机防盗
  3. 华为matepad进行html编辑,华为平板matepad如何分屏?6种用法,总有一种适合您
  4. lvgl实现动态切换横竖屏
  5. 来新加坡旅游,花园城市享受野趣
  6. java中smb启动多线程_Java中SMB的相关应用
  7. Lie群、Lie代数
  8. Linux网络编程——原始套接字能干什么?
  9. 让狙击肺炎疫情稳准狠?春运返程中地图大数据的N种姿态
  10. efi shell的英文介绍_产品介绍英文