注意:未定义的属性 - 如何在PHP中避免该消息?

时间:2012-04-13 14:54:37

标签: properties null php-5.3

您好我正在打这个电话:

$parts = $structure->parts;

现在$ structure在特殊情况下只有 parts ,所以调用返回null。这对我很好,我的代码后面有一个 if($ parts){...} 。不幸的是,在代码运行完毕后,我收到了这条消息:

注意:未定义的属性:stdClass :: $ parts in ...

如何取消此消息?

谢谢!

5 个答案:

答案 0 :(得分:19)

函数isset应该完全符合您的需要。

PHP: isset - Manual

示例:

$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; }

了解更多http://php.net/manual/en/function.property-exists.php

答案 4 :(得分:0)

2020年降落在这里,没有人提及:

1。As of PHP 7.0

$parts = $structure->parts ?? false;

2.A frowned-upon practice-the stfu operator

$parts = @$structure->parts;