您好我正在打这个电话:
$parts = $structure->parts;
现在$ structure在特殊情况下只有 parts ,所以调用返回null。这对我很好,我的代码后面有一个 if($ parts){...} 。不幸的是,在代码运行完毕后,我收到了这条消息:
注意:未定义的属性:stdClass :: $ parts in ...
如何取消此消息?
谢谢!
答案 0 :(得分:19)
函数isset
应该完全符合您的需要。
示例:
$parts = (isset($structure->parts) ? $structure->parts : false);
答案 1 :(得分:4)
也许这个
$parts = isset($structure->parts) ? $structure->parts : false ;
答案 2 :(得分:1)
我为多级链接编写了一个辅助函数。假设您想要执行类似 $obj1->obj2->obj3->obj4
的操作,只要其中一层未定义或为空,我的辅助函数就会返回空字符串,因此您使用 $obj1->obj2->obj3->obj4
代替 MyUtils::nested($obj1, 'obj2', 'obj3', 'obj4')
。此外,使用此辅助方法不会产生任何通知或错误。在语法上它不是最好的,但实际上非常舒适。
class MyUtils
{
// for $obj1->obj2->obj3: MyUtils::nested($obj1, 'obj2', 'obj3')
// returns '' if some of tiers is null
public static function nested($obj1, ...$tiers)
{
if (!isset($obj1)) return '';
$a = $obj1;
for($i = 0; $i < count($tiers); $i++){
if (isset($a->{$tiers[$i]})) {
$a = $a->{$tiers[$i]};
} else {
return '';
}
}
return $a;
}
}
答案 3 :(得分:0)
在 property_exists()的帮助下,您可以轻松地从您的php文件中删除“未定义的属性”通知。
以下是示例:
if(property_exists($structure,'parts')){
$parts = $structure->parts;
}
答案 4 :(得分:0)
2020年降落在这里,没有人提及:
$parts = $structure->parts ?? false;
2.A frowned-upon practice-the stfu operator:
$parts = @$structure->parts;