有人可以解释 PHP 中 三元运算符简写( ?:
)和 空合并运算符( ??
)之间的区别吗?
他们什么时候表现不同,什么时候表现相同(如果这种情况发生的话)?
$a ?: $b
VS。
$a ?? $b
原文由 balping 发布,翻译遵循 CC BY-SA 4.0 许可协议
有人可以解释 PHP 中 三元运算符简写( ?:
)和 空合并运算符( ??
)之间的区别吗?
他们什么时候表现不同,什么时候表现相同(如果这种情况发生的话)?
$a ?: $b
VS。
$a ?? $b
原文由 balping 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答623 阅读✓ 已解决
802 阅读
当您的第一个参数为空时,它们基本相同,只是当您有未定义的变量时,空合并不会输出
E_NOTICE
。 PHP 7.0 迁移文档 有这样的说法:下面是一些示例代码来演示这一点:
有通知的行是我使用速记三元运算符而不是空合并运算符的行。但是,即使有通知,PHP 也会返回相同的响应。
执行代码: https ://3v4l.org/McavC
当然,这总是假设第一个参数是
null
。一旦它不再为空,那么您最终会遇到不同之处,即??
运算符将始终返回第一个参数,而?:
速记仅在第一个参数为真时才会返回,并且依赖于 PHP 如何将事物类型转换为 boolean 。所以:
那么
$a
等于false
和$b
等于'g'
。