在旧的PHP中,IF语句被写成
if ($a && $a->b()) {
...
}
以上内容可以作为写入PHP8中吗
if ($a?->b()) {
...
}
类方法可以简单地(无等式(用作吗
$a?->b();
而不是
if ($a) {
$a->b();
}
这两个语句在技术上不等价,但可能是预期的。
?->
运算符称为nulsafe运算符,专门检查左侧是否存在null。正如手册页所说:
效果类似于先在is_null((检查中包装每个访问,但更紧凑。
所以以下都是等价的
if (is_null($a) && $a->b()) {
echo 'here';
}
if ($a === null && $a->b()) {
echo 'here';
}
if ($a?->b()) {
echo 'here';
}
然而,这并不是你写的;您自己使用CCD_ 2";在布尔上下文中";,这意味着你所要检查的只是它是";truthy;或";不是空的";。要进行演示,请考虑以下内容:
$a = false;
if ($a && $a->b()) {
echo 'here';
}
在这里,现有的代码将是快捷方式,但nulsafe运算符不会。意图的一个完全详细的版本可能看起来像这样:
$a = true;
if ($a instanceof SomeClass && $a->b()) {
echo 'here';
}
在实践中,您可能已经知道$a
是正确的对象或null(例如,它在参数或属性上传递了?SomeClass
类型约束(,在这种情况下,是的,?->
nulsafe运算符意味着您不再需要额外的检查。