您好,我正在打这个电话:
$parts = $structure->parts;
现在 $structure 只有特殊情况下的部分,所以调用返回 null。这对我来说很好,我的代码后面有一个if($parts) {...} 。不幸的是,在代码完成运行后,我收到了这条消息:
注意:未定义的属性:stdClass::$parts in ...
如何抑制此消息?
谢谢!
您好,我正在打这个电话:
$parts = $structure->parts;
现在 $structure 只有特殊情况下的部分,所以调用返回 null。这对我来说很好,我的代码后面有一个if($parts) {...} 。不幸的是,在代码完成运行后,我收到了这条消息:
注意:未定义的属性:stdClass::$parts in ...
如何抑制此消息?
谢谢!
该功能isset
应该完全满足您的需求。
例子:
$parts = (isset($structure->parts) ? $structure->parts : false);
也许这个
$parts = isset($structure->parts) ? $structure->parts : false ;
在property_exists()的帮助下,您可以轻松地从 php 文件中删除“未定义属性”通知。
以下是示例:
if(property_exists($structure,'parts')){
$parts = $structure->parts;
}
2020 年来到这里,惊讶地发现没有人提到:
1.自 PHP 7.0 起:
$parts = $structure->parts ?? false;
$parts = @$structure->parts;
我已经为多级链接编写了一个辅助函数。假设您想做类似的事情$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;
}
}