无法在PHP中的函数参数中指定动态变量

时间:2012-10-21 00:21:55

标签: php

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

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不允许我在没有声明静态字符串的情况下执行此操作,或者如果我遇到了语言的限制。任何人都有任何关于原因的想法吗?

1 个答案:

答案 0 :(得分:2)

功能参数的默认值不能是动态的!
从函数参数的默认值PHP Manual开始:

  

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

你可以做的是将默认参数设置为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"));
}