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

190

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

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

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

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

gregh
источник

Ответы:

253

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

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}
Джефф Винкворт
источник
function dosomething($var1, $var2, $optionalValue = null)Я нашел этот лучший вариант.
Мухаммед Зайд Патан
52

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

Если вам нужна эта функциональность, однако:

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

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

Росс
источник
1
однако, это оценит, если 0 или «false» было передано в $ bar.
Tyzoid
33
Null намного лучше по умолчанию.
Kzqai
3
@DooMMasteR, здесь вы имеете в виду $bar === false- это действие, которое должно быть выполнено, когда по $barумолчанию false. Это позволит избежать некорректного действия, если 0оно передано, поэтому оно работает - ЕСЛИ БУЛ не требуется. Как сказал Kzqai, следует использовать более общее решение $bar = null, потому что оно также может использоваться, когда значения $ bar являются логическими. Тогда тест становится if (is_null($bar))или if ($bar === null).
ToolmakerSteve
22

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

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

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

gregh
источник
14

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

function date ($format, $timestamp='') {
}
тип машины
источник
10

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

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.

Ларс Гируп Бринк Нильсен
источник
8

Если вы не знаете, сколько атрибутов нужно обработать, вы можете использовать переменную tok ( ...) с переменным списком аргументов, представленную в 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');

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

Гергели Лукачи
источник