PHP 8 ?-> in IF 语句



在旧的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运算符意味着您不再需要额外的检查。

相关内容

  • 没有找到相关文章

最新更新