在非对象上调用成员函数getTitle() - 但是是一个对象

时间:2016-01-19 12:58:45

标签: php oop

我正在研究这种方法。

public function getTabs()
{
    $tabs = [];
    foreach ($this->campaigns as $index => $campaign) {

        // return $campaign->getTitle();
        // return get_class($campaign);
        // $title = $campaign->getTitle();

        // return $campaign->getTabTitle();
        // return get_class($campaign);
        // $title = $campaign->getTabTitle();

        array_push($tabs, [
                'title' => $title
            ]);
    }
    return $tabs;
}

$ this->广告系列数组中的值是广告系列对象的实例(对于shure,由于addCampaign方法中的类型提示 - 此处未显示但仍然显示)。

如果我取消注释返回值而不是将其保存到变量的行,它会起作用,但如果我尝试将其保存到$ title变量,则会抛出异常Call to a member function getTitle() on a non-object

我还尝试了其他方法,但仍然没有运气......

关于如何解决这个问题的任何想法?

为什么PHP在这里有所作为?想了解这个过程!

感谢每个人花时间阅读本文! :)

2 个答案:

答案 0 :(得分:2)

我最好的选择是你campaigns中的一个人不是一个对象。尝试var_dump($this->campaings);

如果你输入返回值会有效,因为它会在第一个元素之后停止foreach循环,但如果将它存储在变量中,它将尝试在数组的所有元素上调用getTitle()方法。

答案 1 :(得分:1)

以下代码可以帮助您找出特定项目的问题:

foreach ($this->campaigns as $index => $campaign) {
    var_dump(get_class($campaign));
}

如果它没有帮助,那么看看整个班级会很棒。也许还有其他地方你要将一个项目添加到数组中。也许在初始化期间?