Typehint是一个允许null的setter


Typehint a setter that allows null

在我的实体中,我有一个值对象属性。

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