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;
}