添加新关联时,学说2致命错误



我有两个对象类,会话和说话者,并具有多一到多的关联。当我想将扬声器添加到会话中时,我会使用此代码:

109   $session->getSpeakers()->add($speaker);
110   $speaker->getSessions()->add($session);

这适用于现有会话。现在,当我实例化新会话时,然后尝试以相同的方式添加扬声器,我会收到此错误:

Fatal error:  Uncaught Error: Call to a member function add() on null in C:###apisessionsupdate.php:109
Stack trace:
#0 {main}
  thrown in C:###apisessionsupdate.php on line 109

我认为这是因为新会话还没有任何扬声器,因此当我致电getSpeakers()时返回null。

但是,我在学说文档中找不到有关如何规避此问题的任何内容。我错过了某个地方吗?

您是否在构造函数中初始化了您的集合?

// missing parts skipped for brevity
public function __construct(...)
{
    // ...
    $this->speakers = new ArrayCollection();
    $this->sessions = new ArrayCollection();
}

无论如何,您的代码在固体方面的质量很差。您应该使用称为:

的方法
addSpeaker(Speaker $speaker)
addSession(Session $session)

因此,只有对象本身知道如何处理集合。目前,您泄露了班级外部的内部细节(SRP,违规法律(,因为它会及时降低代码可维护性。

最新更新