检查变量是否存在以及它是否在一行中具有特定值

Checking if variable exist and if it has a certain value in one line

我一直认为,如果我想检查一个变量是否存在并且具有特定值,我必须使用两个 if 条件:

if(isset($x)){
    if($x->age==5){}
}

但我意识到也可以这样在一行中完成:

if(isset($x) && ($x->age==5)){}

有人能告诉我如果 $x 为空,为什么第二个变体不会导致错误。假设 $x 为空且没有 属性 age?它会尝试访问不存在的 属性 吗?

$x=null;

因为$x为空,isset($x)为假。然后,因为逻辑运算符“AND”(&&),条件不能完全成立,所以,这里停止测试,不执行($x->age==5)

对于更短的代码,从 PHP 8.0.1 开始,您可以使用 NullSafe Operator (?->)

if ($x?->age == 5) { }