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 }

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")));

私の2つの異なる試みで。もちろんこれ

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 に答える