【问题标题】:Fatal error: Call to a member function create() on a non-object in <file>致命错误:在 <file> 中的非对象上调用成员函数 create()
【发布时间】:2010-08-17 07:35:18
【问题描述】:

对于一个 php 项目,我使用 Collection 类来处理我的对象并在类似 Java 的集合中延迟加载。

例如,现在我的对象有一个电子邮件地址的集合。因此,我调用对象的 getEmailAddresses() 函数,该函数调用映射器以返回电子邮件地址的集合。

这很好用,但是当我对我的集合执行 foreach 循环时,它会返回有效数据,最后会出现以下错误:

Fatal error: Call to a member function create() on a non-object in /foo/bar/Collection.php on line 89

它指向以下函数:

public function current()
    {
        if ($this->_collection instanceof Iterator)
            $key = $this->_collection->key();
        else
            $key = key($this->_collection);
        if ($key === null)
            return false;
        $item = $this->_collection[$key];
        if (!is_object($item)) {
            $item = $this->_gateway->create($item);
            $this->_collection[$key] = $item;
        }
        return $item;
    }

这一行:

$item = $this->_gateway->create($item);

_gateway 是集合使用的适配器。我不使用它并将其保持为空。或许与此有关?

有人知道吗?因为一切都在正常运行,所以我可以读取 collectiondata。这只是错误。

【问题讨论】:

  • 调用这个方法的时候$this-&gt;_gateway初始化了吗?

标签: php collections


【解决方案1】:

替换

if (!is_object($item))

if (!is_object($item) && !is_null($this->_gateway))

这当然只是确保在未设置网关的情况下不会调用代码,因此它不会对 $item 做任何事情(这可能不是您想要的)。

【讨论】:

  • 嗯,两个答案都不起作用。我尝试在 nullobject 上调用方法时遇到错误它看起来像映射器附加了一个它不应该的对象。好像它附加了一个空对象,但 Collection 将其作为可数值处理,而不是作为所需对象。
  • 那么你的问题的根源在别处,调试(使用xdebug或Zend Debugger)应该有助于找到原因。
【解决方案2】:

已经收到了!

看起来如果请求的集合没有任何对象,它只是试图做一些事情。

如果我首先计算项目并将其与 > 0 进行比较,它不会返回任何错误。这将是一个问题,因此我将更新课程以首先检查它。

我不是唯一一个使用它的人,这不是您所期望的错误。

【讨论】:

    【解决方案3】:

    这仅意味着$this-&gt;_gateway 不是对象,它应该是。不能为空。

    你可以改变这一行:

    $item = $this-&gt;_gateway-&gt;create($item);

    if(is_object($this->_gateway)) {
      $item = $this->_gateway->create($item);
    }
    

    这将修复此错误,但可能会导致更多错误,具体取决于 $item 应该是什么。

    【讨论】:

    • 是的,但奇怪的是我用这个类以同样的方式在这个项目中获得更多的集合。它就像一个魅力。但是现在它给出了这个错误......这很奇怪。
    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 2013-11-25
    • 2012-05-30
    • 2016-08-30
    • 2015-02-06
    • 2012-05-14
    • 2013-11-19
    • 2017-04-30
    相关资源
    最近更新 更多