在我的实体中,我有一个属性值的对象。
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?
有没有人有这个优雅的解决方案?
答案 0 :(得分:1)
将public $status
设为MeetingStatus::DRAFT
public function __construct() {
$this->status = MeetingStatus::DRAFT;
}
如果你把它设为NULL,请不要调用setter。
OR
始终设置会议状态。您可以将其设置为MeetingStatus::UNDEFINED
const UNDEFINED = null;
答案 1 :(得分:1)
您可以在构造函数中设置默认值,几乎与previous answer中一样:
private $status;
public function __construct()
{
$this->status = new MeetingStatus(MeetingStatus::DRAFT);
}
public function setStatus(MeetingStatus $status)
{
$this->status = $status;
}
现在,您无需在setStatus()
中将成员设为public或允许null