三元运算符简写 ?? 和 ?:

rap*_*2-h 1 php

有时我的代码并不关心是否设置了某些内容,“false”,“empty”,“0”或“null”。我只想显示其内容,如果没有内容(无论出于何种原因),则显示其他内容。我通常会做这样的事情:

echo isset($a) && $a ? $a : 'something else';
Run Code Online (Sandbox Code Playgroud)

似乎使用三元简写,我可以对“empty”、“false”、“null”执行类似的操作:

echo $a ?: 'something else';
Run Code Online (Sandbox Code Playgroud)

但如果没有设置 $a 则不起作用。所以我可以做这样的事情:

echo $a ?? 'something else';
Run Code Online (Sandbox Code Playgroud)

但如果为空,它将显示一个空字符串$a有什么技巧或速记可以简化我的代码吗?(仅当已设置且不是空-假-空时才显示“其他内容”)。

用例示例:通过解析 JSON,条目可以没有值、没有键或没有内容,但这并不重要,您必须以相同的方式处理它。如果为空、未设置、为 false 或为 null,则同样的情况

dec*_*eze 5

??实际上只进行合并,不考虑真实性
?:另一方面,不会捕获未定义的变量错误。

我在这里看到的唯一简化是您对isset($a) && $a;的使用。这正是该empty语言构造的用途:

echo !empty($a) ? $a : 'something else';
Run Code Online (Sandbox Code Playgroud)

话虽如此,您首先不应该有很多未定义的变量,这是糟糕的编码。您似乎最关心数组键,在这种情况下,一个小的辅助函数可能是最好的做法:

echo get($a, 'key', 'something else');
Run Code Online (Sandbox Code Playgroud)

我将实现留给读者作为练习。