我想这样做
if( !$result['success'] ?? false){
... //handle error case
但是它不起作用。为什么不呢?
解决方法是这样:
$isSuccess = $result['success'] ?? false;
if((!$isSuccess){
... //handle error case
有更好的解决方法吗?
再现测试:
<?php
$a = [];
$x = !$a['x'] ?? 'bbb';
echo $x;
2个问题。引发通知。并且:回显“ 1”
答案 0 :(得分:3)
您可以对要否定的表达式进行分组。
if (!($result['success'] ?? false)) {
这是一个operator precedence问题。否定的优先级高于空合并的优先级,因此在进行求值之前就可以对其进行评估。
例如$x = !$a['x'] ?? 'bbb';
我们说的是“如果!$a['x']
为空,则'bbb'
”。好吧,$a['x']
是为空,因为它没有定义,但是!$a['x']
不是为空,它实际上是true
(因为{ {1}}),所以??之后的表达式部分永远不会被评估。
您看到1是因为它是!null === true
的字符串表示形式。
如果是我的,我会改写为
true
因为if (empty($result['success'])) {
将同时检查存在性和真实性。