0

进行一些编码,并想为我拥有的函数中的参数设置今天日期的默认值。然而,让它工作并让它仍然是动态的有一些问题。这是当前设置,其中我为某些函数参数分配了静态值。

private function search($text, $startDate = "2012-10-19", $endDate = "2012-10-20") { //code goes here }

不是我想要的,但它是有效的,并且 IDE 不会抱怨。

这是我尝试过的,口译员有相应的抱怨

private function search($text, $startDate = $this->getCurrentDate(), $endDate = "2012-10-20") { //code goes here }

返回“语法错误,意外 $this”,其中 getCurrentDate 指的是仅返回字符串的私有函数。当我调用在类范围内声明的变量时会发生相同的共现(当然减去 getCurrentDate 末尾的括号)。使用 static 会出现“未定义的类常量 'self::getCurrentDate '”,无论我将其称为函数还是类范围变量,这很奇怪,因为我已经将它定义为这样。

    private static function getDate() {
    return "foo";
}

private static $getTodaysDate = date("M-d-Y", mktime(0, 0, 0, date("M"), date("d"), date("Y")));

在我的两次不同的尝试中。当然这个

private function search($text, $startDate = date("M-d-Y", mktime(0, 0, 0, date("M"), date("d"), date("Y"))), $endDate = "2012-10-20") { //code goes here }

根本不起作用。

所以我确定这只是我遗漏的一些明显的东西,但我不明白为什么 PHP 不允许我在没有声明静态字符串的情况下执行此操作,或者我是否正在违反语言的限制。有人对原因有什么想法吗?

4

1 回答 1

2

函数参数的默认值不能是动态的!
来自函数参数默认值的PHP 手册:

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

您可以做的是将默认参数设置为null,然后在您的函数中检查参数是否是null,如果是,则用当前日期覆盖它。

private function search($text, $startDate = null, $endDate = "2012-10-20") {
    if ($startDate === null) $startDate = date("M-d-Y", mktime(0, 0, 0, date("M"), date("d"), date("Y"));
}
于 2012-10-21T00:24:38.997 回答