键入允许null的setter

时间:2016-05-04 08:57:15

标签: php type-hinting

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

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?

有没有人有这个优雅的解决方案?

2 个答案:

答案 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