【问题标题】:Avoid try catch when accesing to an non-existing object property访问不存在的对象属性时避免 try catch
【发布时间】:2015-10-30 10:58:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: php object properties try-catch


    【解决方案1】:

    您可以编写一个神奇的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 '';
    }
    

    然后是您可以调用的应用程序/视图端;

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

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

    【讨论】:

    • 能否详细说明对函数的调用?我的意思是,课外的部分。我不知道如何为每个可能的属性调用它。谢谢!!
    • @Cesar 我已经编辑了答案,你能再检查一下,如果它适合你的用法吗?
    • 完美!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    相关资源
    最近更新 更多