我有两个对象类,会话和说话者,并具有多一到多的关联。当我想将扬声器添加到会话中时,我会使用此代码:
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,违规法律(,因为它会及时降低代码可维护性。