将null DateTime传递给php函数

har*_*ryg 1 php datetime

我在php中有一个函数,我想接受DateTime对象或null.例如

function foo(DateTime $aDate){
   if ($aDate == null){
       echo "You passed a null variable";
   } else {
       echo "You passed the date " . $aDate->format('Y-m-d');
   }
}
Run Code Online (Sandbox Code Playgroud)

麻烦的是,因为函数需要一个DateTime对象,当我向它传递null并且给出错误时它会翻转:

Catchable fatal error: Argument 1 passed to foo() must be an instance of DateTime, null given,...
Run Code Online (Sandbox Code Playgroud)

如何将null传递给函数并避免此错误?

小智 7

将 a 添加?到类型提示。

    function foo(?DateTime $aDate){
        if ($aDate == null){
            echo "You passed a null variable";
        } else {
            echo "You passed the date " . $aDate->format('Y-m-d');
        }
    }
Run Code Online (Sandbox Code Playgroud)

这种方式只允许显式 NULL 或 DateTime。


Nea*_*eal 6

改变一下:

function foo(DateTime $aDate){
Run Code Online (Sandbox Code Playgroud)

对此:

function foo($aDate){
Run Code Online (Sandbox Code Playgroud)

但是如果你仍然想确保传递的对象是一个DateTime对象,你可以这样做:

function foo(DateTime $aDate = null){
Run Code Online (Sandbox Code Playgroud)

有关类型提示的更多示例,请参见此处.