Как использовать переменные в аргументе функции PHP? - PullRequest
1 голос
/ 23 июня 2011

У меня сейчас есть этот код.

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)

ни одна из этих работ. Как мне заставить это работать?

Спасибо!

Ответы [ 5 ]

4 голосов
/ 23 июня 2011

вы не можете использовать оператор в объявлении функции, но вы можете установить значение в null и проверить его во время выполнения:

function foo( $bar = null )
{
  if (is_null($bar))
  {
    $bar = 'baz';
  }
  ...code...
}
3 голосов
/ 23 июня 2011

Вы не можете иметь выражения в объявлении функции.Но константы могут быть обходным решением для того, что вы хотите сделать.

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) {

Они на самом деле тоже выражения, но они специально обрабатываются в этом контексте и работают там, где =$date1 не будет.

1 голос
/ 23 июня 2011

Нельзя передавать переменные в качестве значений по умолчанию.Ниже приведено возможное решение того, чего вы пытаетесь достичь:

<?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
0 голосов
/ 23 июня 2011

Я сделаю предположение и скажу, что вы пытаетесь установить $ date1 равным переменной в функции. Это не обязательно, просто перечислите их по порядку. function outputCalendarByDateRange($client, $date1, $date2)

0 голосов
/ 23 июня 2011

Вы не можете иметь переменные значения аргумента по умолчанию , вам придется решить это в коде:

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, вызывая ее с аргументами, вы можете указать свои собственные значения.

...