当前位置: 首页 > 面试题库 >

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

翟俊哲
2023-03-14
问题内容

有人可以解释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#中,如果您尝试访问不存在的数组/字典项,那么还将出现运行时错误。