避免注意:stdClass中的未定义属性

时间:2016-09-30 04:58:12

标签: php notice

$a = (object)['foo' => 'bar'];
$a->baz;

$a->baz来电返回NULL,但也会发出通知Undefined property..。当一个属性不存在但是有什么方法可以抑制这个特殊的通知(从配置或其他东西,而不是if语句或@符号,这是显而易见的)但是看到其他通知时,获取null就没关系了吗?

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是创建一个使用__get魔术方法的自定义std类:

class customStdClass
{
    public function __get($name)
    {
        if (!isset($this->$name)) {
            return null;
        }

        return $this->$name;
    }

    public static function fromArray($attributes)
    {
        $object = new self();

        foreach ($attributes as $name => $value) {
            $object->$name = $value;
        }

        return $object;
    }
}

您可以像以下一样使用它:

$object = customStdClass::fromArray(['foo' => 'bar']);
echo $object->foo;
echo $object->baz; // no warning here