0

オプションの引数を 1 つ取る関数を作成しようとして、少し行き詰まりました。これを文字列にする代わりに、関数 (またはさらに良いのは 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 に答える