我有一个处理日期的类方法:
public function setAvailability(DateTime $start, DateTime $end){
}
由于项目可用性可以有下限,上限,两者或没有,我想让setAvailability()接受NULL值。但是,NULL
常量违反了类型提示:
$foo->setAvailability(NULL, $end);
触发器:
可捕获的致命错误:参数1 传递给Foo :: setAvailability()必须是一个 DateTime的实例,给定为null
而且,据我所知,我没有没有值的DateTime实例。 (可以吗?)
由于我无法理解的原因,这似乎有效:
public function setAvailability(DateTime $start=NULL, DateTime $end=NULL){
}
...
$foo->setAvailability(NULL, $end);
但它看起来像一个纯粹机会的黑客。
您如何处理PHP类中的未设置日期?
答案 0 :(得分:20)
在the PHP manual on typehinting中明确说明了这一点:
现在,函数可以强制参数为对象(通过在函数原型中指定类的名称)或数组(自PHP 5.1起)。但是,如果将NULL用作默认参数值,则允许将其作为后续调用的参数。
答案 1 :(得分:2)
对我来说,你的例子看起来像在Item对象中,将检查参数是否为null或DateTime对象(如果/ else)。我会将Item对象中的责任移除到自定义DateTime中,例如通过扩展DateTime。这个MyDateTime将负责知道日期是否“从时间开始”。项目没有必要这样做。