0

我在尝试创建一个采用单个可选参数的函数时有点卡住了。我希望它不是一个字符串,而是一个函数(或者更好的是,一个 DateTime 对象)的结果。本质上 - 我希望用户要么传入一个 DateTime 对象,要么让函数在没有提供参数的情况下诉诸今天的日期。这可以用PHP吗?通过尝试在函数头中创建新对象

function myDateFunction($date = new DateTime()){
//My function goes here.
}

导致 PHP 崩溃。

非常感谢。

4

6 回答 6

5

默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。

http://php.net/manual/en/functions.arguments.php#example-154

于 2013-09-15T11:23:58.133 回答
5

是的。如果将$date实例化移动到函数体是可能的:

<?php
header('Content-Type: text/plain');

function myDateFunction(DateTime $date = null){
    if($date === null){
        $date = new DateTime();
    }

    return $date->format('d.m.Y H:i:s');
}

echo
    myDateFunction(),
    PHP_EOL,
    myDateFunction(DateTime::createFromFormat('d.m.Y', '11.11.2011'));
?>

结果:

15.09.2013 17:25:02
11.11.2011 17:25:02

来自php.net

类型提示允许 NULL 值

于 2013-09-15T11:25:51.407 回答
2

你可以这样做:

function myDateFunction($date = null){
    if(is_null($date) || !($date instanceof DateTime)) {
        $date = new DateTime();
    }

    return $date;
}

var_dump(myDateFunction());
于 2013-09-15T11:25:20.587 回答
1

您可以使用其他选项:

function myDateFunction($date = null){
 if(is_null($date)) $date = new DateTime();

}
于 2013-09-15T11:26:10.667 回答
1
function myDateFunc($date = null){
   if(!isset($date) || $date !instanceof DateTime){
     $date = new DateTime()
   }
   /* YOur code here*/
}
于 2013-09-15T11:26:52.067 回答
0

对于函数中的可选参数,您可以编写如下代码

function myDateFunction($date = ''){
         //My function goes here.
         if($date==''){ $date = new DateTime()}
    }

希望能帮助到你

于 2013-09-15T11:24:53.343 回答