2011-06-23 25 views
1

私は現在このコードを持っています。PHP関数の引数で変数を使用する方法?

function outputCalendarByDateRange($client, $startDate="2011-06-22", 
           $endDate='2011-06-26') 

私は$たstartDateと$ endDateにはそれが自動的に更新すると、今日の日付と三日、今から日付を反映します。私は

$startDate=date("Y-m-D") 
$endDate=strtotime(date("Y-m-d", strtotime($todayDate)) . " +3 days"); 

$date1=date("Y-m-D") 
$date2=strtotime(date("Y-m-d", strtotime($todayDate)) . " +3 days"); 
    function outputCalendarByDateRange($client, $startDate=$date1, 
           $endDate=$date2) 

これらの作品のどれを使用してみました。私はそれをどのように機能させるのですか?

ありがとうございます!

あなたは関数宣言でステートメントを使用することはできませんが、実行時にそれをゼロにし、チェックするために値を設定することができます
+0

最初の '$ endDate'は非常に過度です。単純な$ endDate = date( 'Y-m-D'、strtotime( '+ 3 days')) 'が実行します。 –

+0

@Marc B:実際には、毎晩真夜中頃に問題にぶつかります。$ startDate:$ endDate = date( 'Ym-d'、strtotime($ startDate。 3日)) 'を実行して、2つのステートメントの実行中に日付の変更を処理します。スクリプトが3行目のコードに到達するまでにはまだ1日は外れますが、少なくとも2つの日付は一様にオフになります... –

+0

@Et:その場合は、 strtotimeを使って余分な時間をすべて奪うのではなく、今日の時間値です。それは魔法の機能ですが、効率的ではありません。 –

答えて

4

function foo($bar = null) 
{ 
    if (is_null($bar)) 
    { 
    $bar = 'baz'; 
    } 
    ...code... 
} 
+0

また、 'array()'、 '' "、' null'、 'false'などがデフォルトをトリガする必要がある場合には、' empty'をチェックに使うことができます。 – zzzzBov

0

あなたは変数のデフォルト引数値を持つことはできません、あなたは「コードでこれを解決しなければならないでしょう:

function outputCalendarByDateRange($client, $startDate = null, $endDate = null) { 
    $startDate = $startDate ? $startDate : date('Y-m-d'); 
    $endDate = $endDate ? $endDate : date('Y-m-d', strtotime('+3 days')); 

    ... 
} 

現在の日付/現在の日付+3を使用する第二と第三引数を指定せずにこの関数を呼び出すと、あなたは独自の値を指定できる引数でそれを呼び出します。

3

関数宣言に式を含めることはできません。しかし、定数はあなたがしたいことの回避策になる可能性があります。

define("FUNC_CAL_DATE1", date("Y-m-D")); 
define("FUNC_CAL_DATE2", strtotime(date("Y-m-d",strtotime($to... 

function outputCalendarByDateRange($client, 
      $startDate=FUNC_CAL_DATE1, $endDate=FUNC_CAL_DATE2) { 

は、彼らがあまりにも実際に表現しているが、特別にこのコンテキストと仕事で取り扱われる場合​​はないでしょう。

+0

すてきな回避策 - それを考えていませんでした。 +1 –

+0

私はキャッシュのために問題があるかどうかについて興味があります。 – zzzzBov

1

デフォルト値として変数を渡すことはできません。あなたが達成しようとしているものに可能な解決策については、以下を参照してください:

<?php 
    error_reporting(E_ALL); 

    $defaultStartDate = date("Y-m-d"); 
    $defaultEndDate = date("Y-m-d", strtotime($defaultStartDate . " + 3 days")); 

    function outputCalendarByDateRange($client, $startDate="", $endDate="") { 
     global $defaultStartDate, $defaultEndDate; 

     if ($startDate === "") { 
      $startDate = $defaultStartDate; 
     } 
     if ($endDate === "") { 
      $endDate = $defaultEndDate; 
     } 
     echo "Client: " . $client . "<br />"; 
     echo "Start Date: " . $startDate . "<br />"; 
     echo "End Date: " . $endDate . "<br />"; 
    } 

    outputCalendarByDateRange("Test Client"); 

    echo "<br />"; 

    outputCalendarByDateRange("Test Client #2", date("Y-m-d", strtotime("2011-06-01")), date("Y-m-d", strtotime("2011-07-01"))); 

?> 

出力:

Client: Test Client 
Start Date: 2011-06-23 
End Date: 2011-06-26 

Client: Test Client #2 
Start Date: 2011-06-01 
End Date: 2011-07-01 
-1

私は推測を取るつもりだとあなたは同じ$日付1を設定しようとしていると言います関数内の変数に渡します。それは必要ではない、ちょうどそれらを順序でリストする。 function outputCalendarByDateRange($client, $date1, $date2)