在PHP中“尝试在非对象上获取属性”

时间:2010-12-20 02:53:19

标签: php wordpress

我是一名WordPress主题开发人员,在我正在处理的主题上,我打开了调试模式,并在主题选项页面的选择下拉框中显示此错误。

错误说明:“试图获取非对象的属性。”这是违规代码:

 <select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
                <?php foreach ($value['options'] as $option) { ?>
               <option value="<?php echo $option->term_id; ?>"  <?php if ( $settings[$id] == $option->term_id) { echo 'selected="selected"'; }?>>
                    <?php echo $option->name; ?>
                </option>                       
               <?php }?>  </select> 

我无法弄清楚我做错了什么。特别导致错误的行是:

<option value="<?php echo $option->term_id; ?>"  <?php if ( $settings[$id] == $option->term_id) { echo 'selected="selected"'; }?>>

感谢您的任何建议! :)

4 个答案:

答案 0 :(得分:4)

你这样做了几次:

$option->someproperty

至少有一个案例$option不是一个对象。然后,当您对非对象执行->时,您会收到该错误。

首先,验证$option实际上是一个对象,如果不是,则更正用法。

如果$option是数组,那么@matthewpavkov是正确的,您应该$option['someproperty']而不是$option->someproperty

如果$option通常是对象,则get_categories()有时会在失败情况下返回nullfalse。在访问$option之前检查一下。

像这样:

foreach ($value['options'] as $option)
{
    if ($option)
    {
        // do whatever;
    }
}

答案 1 :(得分:0)

$option似乎是一个数组。尝试:

$option['term_id']

答案 2 :(得分:0)

好的,我明白你在说什么。在我的代码中,我有这个(过于简化,只是为了显示重要的部分):

$news_categories = get_categories()  //pulls all of the categories from WordPress

        array ("minititle"      => '<span class="mini_title">Select the category you\'d like to use as your "Top Story" category.</span>',
            "id"        => $shortname . "_top_story_category",
            "type"      => "cat_select",
            "options" => $news_categories)

这是$ value ['options']来自的地方。代码是switch语句的一部分......

我必须发布整个文件才能给出上下文,而且它很长。

答案 3 :(得分:0)

从行动中执行......即:

function your_function(){
    YOUR CODES HEREEEEEEEEEEE............
}
ADD_ACTION('init','your_function');