PHP 7 的"Trying to get property of non-object"错误(在 PHP 5.4 中工作)



这是我的函数:

function get_cat_option($data, $pid, $cid=0, $parent=0){
    static $i = 1;
    $tab = str_repeat(" ",$i);
    static $a = 0;
    $pusher = "-";
    $showPusher = str_repeat($pusher,$a);
    if(isset($data[$parent]) && $data[$parent])
    {
        $html = "$tab";
        $i++;
        foreach($data[$parent] as $v)
        {
            $a++;           
            $child = get_cat_option($data, $pid, $cid, $v->category_id);
            if($v->category_parent_id == 0)
            {
                $listChild = "";
            }
            if($v->category_id == $pid)
            {
                $selected = ' selected';
            }
            else
            {
                $selected = '';
            }
            if($v->category_id == $cid)
            {
                $disabled = ' disabled';
            }
            else
            {
                $disabled = '';
            }
            $html .= "$tab";
            $html .= '<option value="'.$v->category_id.'"'.$selected.$disabled.'>'.$showPusher.' '.$v->category_title.'</option>';
            $a--;
            if($child)
            {
                $i--;
                $html .= $child;
                $html .= "$tab";
            }
        }
        $html .= "$tab";
        return $html;
    }
    else
    {
        return false;
    }
}

我这样称呼它:

<dt><select name="category" size="1" class="field form" style="width: 325px">
        <option value="">--</option>
        <?=get_cat_option($parent_data,$data['product_category'])?>
</select></dt>

错误是:

Trying to get property of non-object in

错误行为:

$child = get_cat_option($data, $pid, $cid, $v->category_id);   

这段代码在 PHP 5.4 中运行良好,但现在我使用的是 PHP 7。

我该如何解决它?

该错误很可能是指$v->category_id参数。如果category_id$v 中不存在,则会抛出错误。

在循环遍历$data[$parent]对象之前,请验证它是否正确:

var_dump($data[$parent]);

很可能$v中没有属性"category_id",因此它会引发警告。您可以使用以下命令检查其是否存在

if (isset($v->category_id)) {
// do something
}

或者我们使用 ?? 运算符来设置默认值。

$category_id = $v->category_id ?? $fallback;

最新更新