Як створювати необов'язкові аргументи в php?


190

У посібнику з PHP, щоб показати синтаксис функцій з необов'язковими параметрами, вони використовують дужки навколо кожного набору залежного необов'язкового параметра. Наприклад, для date()функції посібник говорить:

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

Де $timestampнеобов'язковий параметр, а якщо залишити порожнім, він за замовчуванням time()повертає значення функції.

Як ви створюєте необов’язкові параметри на зразок цього під час визначення спеціальної функції в PHP?

Відповіді:


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.
Тизоїд

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")
  • Значенням аргументу за замовчуванням повинно бути постійний вираз. Це не може бути змінним або викликом функції.


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

Якщо ви не знаєте, скільки атрибутів потрібно обробити, ви можете використовувати маркер списку різноманітних аргументів ( ...), введений у 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');

Як бачите, цей маркер в основному перетворює всі параметри на масив, який ви можете обробити будь-яким способом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.