&引用;试图获取非对象的属性;在PHP中

&引用;试图获取非对象的属性;在PHP中,php,wordpress,Php,Wordpress,我是一名WordPress主题开发人员,在我正在处理的主题上,我打开了调试模式,并在主题的选项页面的选择下拉框中获取此错误 错误是这样的:“试图获取非对象的属性。”下面是有问题的代码: <select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>"> <?php foreach ($value['options'] as $optio

我是一名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
是一个数组。尝试:

$option['term_id']

好吧,我明白你的意思了。在前面的代码中,我有以下内容(过于简化,只是为了显示重要部分):

$news\u categories=get\u categories()//从WordPress中提取所有类别
数组(“minititle”=>“选择要用作“热门故事”类别的类别。”,
“id”=>$shortname.“\u top\u story\u category”,
“类型”=>“类别选择”,
“选项”=>$news\u类别)
这就是$value['options']的来源。代码是switch语句的一部分


为了提供上下文,我必须发布整个文件,而且它相当长。

您已经多次这样做了:

$option->someproperty
在至少一种情况下,
$option
不是对象。然后对非对象执行
->
操作时,会出现该错误

首先,确认
$option
实际上是一个对象,如果不是,请更正用法

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

如果
$option
通常是一个对象,则可能
get_categories()
有时在故障条件下返回
null
false
。在访问
$option
之前检查该选项

像这样:

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

从行动中执行,即:

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

哦,我对在PHP.ini中隐藏这些通知不感兴趣。我真的需要修正这个错误!那么,什么是
$option
?请尝试
var\u dump($option)
。是否确实填充了
$value['options']
?$option已在foreach循环中定义……但它是什么?很明显,它不是一个物体,即使你把它当作一个物体。谢谢,我试过了,但我犯了一个致命的错误。你的意思是用这个代替$option->term\u id吗?你应该编辑这个问题并将这些信息添加到其中,而不是让它成为问题的答案。天哪,这很有效!哇,我已经研究这个问题将近两天了,这个简单的声明解决了这个问题。非常感谢你们,也感谢所有回答的人,我真的非常感谢你们的帮助!!不客气!PHP充满了像这样奇怪的东西。在将来记住这一点!是的,当然!在过去的几天里,我对PHP的了解比这一整年都要多,哈哈。@ajreal-is_object(),而“safe”则是矫枉过正。通常,函数返回您期望的值(在本例中为对象),如果失败,则返回null/false。if($object)抓住了大多数情况。如果函数返回几种不同但有效的类型中的任何一种,那么通常函数的设计有缺陷,或者需要对结果进行更多的逻辑处理,因为它们都是有效的。但是,我想不出任何函数能够有效地返回数组、对象或浮点。你能吗?回答错了,如果$option不是空的,也不是对象,那么你的代码就会失败,PS:is\u对象永远不会被滥用
foreach ($value['options'] as $option)
{
    if ($option)
    {
        // do whatever;
    }
}
function your_function(){
    YOUR CODES HEREEEEEEEEEEE............
}
ADD_ACTION('init','your_function');