Php Typehint允许null的setter

Php Typehint允许null的setter,php,type-hinting,Php,Type Hinting,在我的实体中,有一个属性是值对象 class Meeting { /** @var MeetingStatus */ private $status /** * @param MeetingStatus|null $status */ public function setStatus(MeetingStatus $status = null) { $this->status = $status ?: new M

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

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;
}
如果设置为NULL,则不要调用setter


始终设置会议状态。您可以将其设置为
MeetingStatus::UNDEFINED
其中
const UNDEFINED=null

您可以在构造函数中设置默认值,类似于:


现在,您不需要公开成员或在setStatus()中允许null,根据官方文档,将$status的默认值设置为null是一个不错的选择。从语义上讲,调用setStatus()和setStatus(null)之间没有区别。如果OP希望$status是不可变的,那么您的解决方案可以工作
private $status;

public function __construct()
{
    $this->status = new MeetingStatus(MeetingStatus::DRAFT);
}

public function setStatus(MeetingStatus $status)
{
    $this->status = $status;
}