访问不存在的对象属性时,请避免尝试catch

时间:2015-10-30 10:58:52

标签: php object properties try-catch

我有一个对象,我打印属性的值:

echo $myObject->field_seo_multidomain->$lang_arr[$language]->$domains_arr[$domain]->field_seo->field_meta_description->value;

如果该属性不存在,我该怎么做以避免错误?例如,上面的 $ lang_arr [$ language] (第二级属性)不存在。我使用过try-catch,效果很好,但我担心这可能会耗费大量时间,或者在某些日志文本文件或其他地方累积错误。

1 个答案:

答案 0 :(得分:0)

你可以编写一个魔术getter函数并检查属性的存在,如

public function __get($property) 
{
    if(property_exists($this, $property) {
        return $this->{$property};
    }
}

编辑: 实际上,当我再次检查使用情况时;在field_seo_multidomain类中有一个方法会更好,所以在这个方法中进行检查/验证会更有用

public function getText($lang, $domain){
    if(property_exists($this, $lang) {
        if(property_exists($this->{$lang}, $domain) {
            return $this->{$lang}->{$domain}->field_seo->field_meta_description->value;
        }
    }

    return '';
}

然后你可以打电话给app / view;

echo $myObject->field_seo_multidomain->getText($lang_arr[$language], $domains_arr[$domain]);

如果语言属性或域属性不存在,它只会回显空字符串,您也可以使用此方法添加回退语言功能。

相关问题