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

Álv*_*lez 14 php oop datetime

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

public function setAvailability(DateTime $start, DateTime $end){
}
Run Code Online (Sandbox Code Playgroud)

由于项目可用性可以有下限,上限,两者或没有,我想使setAvailability()接受NULL值.但是,NULL常量违反了类型提示:

$foo->setAvailability(NULL, $end);
Run Code Online (Sandbox Code Playgroud)

触发:

可捕获的致命错误:传递给Foo :: setAvailability()的参数1必须是DateTime的一个实例,给出null

而且,据我所知,我没有没有值的DateTime实例.(我可以吗?)

由于我无法掌握的原因,这似乎有效:

public function setAvailability(DateTime $start=NULL, DateTime $end=NULL){
}
...
$foo->setAvailability(NULL, $end);
Run Code Online (Sandbox Code Playgroud)

但它看起来像一个纯粹的机会工作的黑客.

你会如何处理PHP类中的未设置日期?

Joh*_*ess 20

关于typehinting的PHP手册中已经清楚地说明了这一点:

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

  • @zerocrates:谢谢.它不仅是一种记录在案的行为 - 它还会在您期望的章节中进行解释.我觉得自己像个菜鸟<:-) (2认同)