Как вы создаете необязательные аргументы в php?


В руководстве по PHP, чтобы показать синтаксис функций с необязательными параметрами, они используют квадратные скобки вокруг каждого набора зависимых необязательных параметров. Например, для date() функция, руководство гласит:

string date ( string $format [, int $timestamp = time() ] )

Где $timestamp является необязательным параметром, и если оставить его пустым, по умолчанию используется time() возвращаемое значение функции.

Как вы собираетесь создавать дополнительные параметры, подобные этому, при определении пользовательской функции в PHP?

 145
php
Author: jeremy, 2008-08-29

6 answers

Как и в руководстве, используйте знак равенства (=) в определении параметров:

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}
 202
Author: Jeff Winkworth, 2014-07-03 15:46:59

Значение аргумента по умолчанию должно быть постоянным выражением. Это не может быть переменная или вызов функции.

Однако, если вам нужна эта функция:

function foo($foo, $bar = false)
{
    if(!$bar)
    {
        $bar = $foo;
    }
}

Предполагая, что $bar, конечно, не должно быть логическим.

 41
Author: Ross, 2008-08-29 18:57:57

Некоторые заметки, которые я также счел полезными:

  • Сохраняйте значения по умолчанию с правой стороны.

    function whatever($var1, $var2, $var3="constant", $var4="another")
    
  • Значение аргумента по умолчанию должно быть постоянным выражением. Это не может быть переменная или вызов функции.

 19
Author: gregh, 2017-04-06 17:29:31

Присвойте необязательному аргументу значение по умолчанию.

function date ($format, $timestamp='') {
}
 12
Author: mk., 2008-08-29 17:59:42

Если вы не знаете, сколько атрибутов необходимо обработать, вы можете использовать маркер списка переменных аргументов (...), представленный в PHP 5.6 ( смотрите полную документацию здесь).

Синтаксис:

function <functionName> ([<type> ]...<$paramName>) {}

Например:

function someVariadricFunc(...$arguments) {
  foreach ($arguments as $arg) {
    // do some stuff with $arg...
  }
}

someVariadricFunc();           // an empty array going to be passed
someVariadricFunc('apple');    // provides a one-element array
someVariadricFunc('apple', 'pear', 'orange', 'banana');

Как вы можете видеть, этот токен в основном преобразует все параметры в массив, который вы можете обрабатывать любым удобным вам способом.

 6
Author: Gergely Lukacsy, 2016-03-02 14:05:44

Функция даты будет определена примерно так:

function date($format, $timestamp = null)
{
    if ($timestamp === null) {
        $timestamp = time();
    }

    // Format the timestamp according to $format
}

Обычно значение по умолчанию задается следующим образом:

function foo($required, $optional = 42)
{
    // This function can be passed one or more arguments
}

Однако только литералы являются допустимыми аргументами по умолчанию, поэтому я использовал null в качестве аргумента по умолчанию в первом примере, нет $timestamp = time(), и объединил его с нулевой проверкой. Литералы включают массивы (array() или []), логические значения, числа, строки и null.

 4
Author: Lars Gyrup Brink Nielsen, 2017-07-12 10:03:56