进行一些编码,并希望在我拥有的函数中为参数设置今天日期的默认值。然而,有一些问题让它工作,并使它仍然是动态的。这是当前设置,其中我将静态值分配给某些函数参数。
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不允许我在没有声明静态字符串的情况下执行此操作,或者如果我遇到了语言的限制。任何人都有任何关于原因的想法吗?
答案 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"));
}