有人可以解释PHP中的三元运算符速记(?:
)和空合并运算符(??
)之间的区别吗?
它们什么时候表现不同,什么时候以相同的方式表现(如果甚至发生)?
$a ?: $b
VS。
$a ?? $b
当您的第一个参数为null时,它们基本相同,不同之处在于,E_NOTICE
当您有未定义的变量时,null合并不会输出。在PHP7.0迁移的文档有这样一段话:
对于需要将三元数与isset()结合使用的常见情况,已将空合并运算符(??)添加为语法糖。如果它存在且不为NULL,则返回其第一个操作数;否则返回第一个操作数。否则返回第二个操作数。
这是一些示例代码来演示这一点:
<?php
$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也会给出相同的响应。
执行代码:https :
//3v4l.org/McavC
当然,这总是假设第一个参数是null
。一旦它不再为null,则最终会出现以下差异:??
运算符将始终返回第一个参数,而?:
简写方式只有在第一个参数为true时才返回,并且这取决于PHP如何将内容类型转换为布尔值。
所以:
$a = false ?? 'f'; // false
$b = false ?: 'g'; // 'g'
则将$a
等于false
和$b
等于'g'
。
本文向大家介绍PHP 空合并运算符(??),包括了PHP 空合并运算符(??)的使用技巧和注意事项,需要的朋友参考一下 示例 空合并是PHP 7中引入的新运算符。如果未设置,则该运算符返回其第一个操作数NULL。否则,它将返回其第二个操作数。 下面的例子: 等同于两者: 和: 该运算符也可以被链接(具有右关联语义): 这等效于: 注意: 在字符串连接上使用合并运算符时,请不要忘记使用括号() 这将
有人能解释一下PHP中三元运算符速记()和空合并运算符()之间的区别吗? 他们什么时候表现不同,什么时候表现相同(如果发生的话)? VS。
问题内容: 我查看了RXJava的文档,发现concat和merge运算符似乎也做同样的事情。我写了几次测试来确定。 该文件说 合并运算符也类似。它结合了两个或多个可观察物的排放,但可以交错,而Concat绝不会交错多个可观察物的排放。 但是我还是不太了解,运行此测试数千次,合并结果始终是相同的。由于未授予该命令,因此我期望有时会出现“反应性”,“世界”,“你好”。 代码在这里https://gi
问题内容: 和之间有什么区别? 松散比较到底如何工作? 严格比较到底如何工作? 有什么有用的例子吗? 问题答案: 如果==运算符不同,则它们在两种不同类型之间进行转换,而===运算符执行“类型安全比较”。这意味着只有两个操作数具有相同的类型和相同的值时,它才返回true。 例子: 警告:具有相等成员的同一个类的两个实例与===运算符不匹配。例:
A recent addition This is a recent addition to the language. Old browsers may need polyfills. 在本文中,我们将值既不是 null 也不是 undefined 的表达式称为“已定义的(defined)”。 空值合并运算符(nullish coalescing operator)的写法为两个问号 ??。 a
问题内容: PHP中是否存在像C#一样的三元运算符? 在C#中更干净,更短,但是在PHP中,您必须执行以下操作: 问题答案: PHP 7添加了空合并运算符: 您还可以看一下编写PHP三元运算符?的简短方法:(仅PHP> = 5.3) 而且您与C#的比较是不公平的。“在PHP中,您必须做类似的事情”-在C#中,如果您尝试访问不存在的数组/字典项,那么还将出现运行时错误。