Php 避免在访问不存在的对象属性时尝试捕获

Php 避免在访问不存在的对象属性时尝试捕获,php,object,properties,try-catch,Php,Object,Properties,Try Catch,我有一个对象,我打印一个属性的值: echo $myObject->field_seo_multidomain->$lang_arr[$language]->$domains_arr[$domain]->field_seo->field_meta_description->value; 当属性不存在时,如何避免错误?例如,$lang\u arr[$language]以上(二级属性)不存在。我使用了try-catch,效果很好,但我担心这会很耗时,或者在某些日

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

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

当属性不存在时,如何避免错误?例如,$lang\u arr[$language]以上(二级属性)不存在。我使用了try-catch,效果很好,但我担心这会很耗时,或者在某些日志文本文件或其他地方积累错误。

您可以编写一个magic-getter函数并检查属性的存在,如

public function __get($property) 
{
    if(property_exists($this, $property) {
        return $this->{$property};
    }
}
编辑: 实际上,当我再次检查使用情况时;最好在类字段\u seo\u 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 '';
}
然后,您可以调用应用程序/视图端

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

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

您能否详细说明对函数的调用?我是说,课外的部分。我不知道如何为每一个可能的财产命名。谢谢@塞萨尔:我已经编辑了答案,你能再检查一下吗?它是否适合你的使用?它太完美了!谢谢