Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的类型提示和可选属性_Php_Oop_Datetime - Fatal编程技术网

PHP中的类型提示和可选属性

PHP中的类型提示和可选属性,php,oop,datetime,Php,Oop,Datetime,我有一个处理日期的类方法: public function setAvailability(DateTime $start, DateTime $end){ } 由于项目可用性可以有下限、上限、两者或无,我想让setAvailability()也接受空值。但是,NULL常量违反了类型提示: $foo->setAvailability(NULL, $end); 触发因素: 可捕获的致命错误:参数1 传递给Foo::setAvailability()的必须是 DateTime的实例,给定n

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

public function setAvailability(DateTime $start, DateTime $end){
}
由于项目可用性可以有下限、上限、两者或无,我想让setAvailability()也接受空值。但是,
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类中未设置的日期?

这一点在:

函数现在可以强制参数为对象(通过在函数原型中指定类的名称)或数组(从PHP5.1开始)。但是,如果将NULL用作默认参数值,则允许它作为以后任何调用的参数


在我看来,您的示例看起来像是在Item对象中检查参数是null还是DateTime对象(if/else)。我将把这个责任从Item对象转移到定制的DateTime中,例如通过扩展DateTime。MyDateTime负责知道日期是否为“从时间开始”。项目不需要这样做。

+1看起来像是一种可以依赖的行为。如果能找出是否存在某种类型的“空”日期时间对象,那就太好了。@zerocrates:谢谢。这不仅是一种记录在案的行为,而且在你期望的章节中也有解释。我觉得自己是个新手,这个主意不错,但我现在更愿意省略这种额外的复杂性层。(实际代码并没有大量使用日期。)