在PHP中键入提示和可选属性

时间:2010-05-05 15:08:40

标签: php oop datetime

我有一个处理日期的类方法:

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类中的未设置日期?

2 个答案:

答案 0 :(得分:20)

the PHP manual on typehinting中明确说明了这一点:

  

现在,函数可以强制参数为对象(通过在函数原型中指定类的名称)或数组(自PHP 5.1起)。但是,如果将NULL用作默认参数值,则允许将其作为后续调用的参数。

答案 1 :(得分:2)

对我来说,你的例子看起来像在Item对象中,将检查参数是否为null或DateTime对象(如果/ else)。我会将Item对象中的责任移除到自定义DateTime中,例如通过扩展DateTime。这个MyDateTime将负责知道日期是否“从时间开始”。项目没有必要这样做。