在我的实体中,我有一个值对象属性。
class Meeting
{
/** @var MeetingStatus */
private $status
/**
* @param MeetingStatus|null $status
*/
public function setStatus(MeetingStatus $status = null)
{
$this->status = $status ?: new MeetingStatus(MeetingStatus::DRAFT);
}
}
我看到typehint和允许null的唯一方法是将null设置为默认参数值。但是,允许一个没有必需参数的setter似乎很奇怪。
$meeting->setStatus(); // wut?
有人对此有一个优雅的解决方案吗?
将public $status
设置为MeetingStatus::DRAFT
public function __construct() {
$this->status = MeetingStatus::DRAFT;
}
如果setter为NULL,则不要调用它。
或
始终设置会议状态。您可以将其设置为MeetingStatus::UNDEFINED
,其中const UNDEFINED = null;
您可以在构造函数中设置默认值,就像前面的答案一样:
private $status;
public function __construct()
{
$this->status = new MeetingStatus(MeetingStatus::DRAFT);
}
public function setStatus(MeetingStatus $status)
{
$this->status = $status;
}
现在,您不需要将成员公开,也不需要在setStatus()中允许null