Jak tworzysz opcjonalne argumenty w php?


190

W podręczniku PHP, aby pokazać składnię funkcji z parametrami opcjonalnymi, używają nawiasów wokół każdego zestawu zależnych parametrów opcjonalnych. Na przykład dla date()funkcji instrukcja brzmi:

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

Gdzie $timestampjest parametrem opcjonalnym, a pozostawione puste, domyślnie przyjmuje time()wartość zwracaną przez funkcję.

Jak zabierasz się do tworzenia takich opcjonalnych parametrów podczas definiowania niestandardowej funkcji w PHP?

Odpowiedzi:


253

Podobnie jak w instrukcji, użyj znaku równości ( =) w definicji parametrów:

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}

function dosomething($var1, $var2, $optionalValue = null)Znalazłem tę lepszą opcję.
Mohammad Zaid Pathan,

52

Domyślna wartość argumentu musi być stałym wyrażeniem. Nie może to być zmienna ani wywołanie funkcji.

Jeśli jednak potrzebujesz tej funkcji:

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

Zakładając, że $barnie należy się oczywiście do logicznych.


1
Jednak oceni to, czy 0 lub „false” zostało przekazane do $ bar.
Tyzoid

33
Null jest znacznie lepszą wartością domyślną.
Kzqai,

3
@DooMMasteR, tutaj masz na myśli $bar === false- jest to akcja, którą należy wykonać, gdy zostanie ustawiona $bardomyślnie false. Pozwoli to uniknąć niepoprawnego działania, jeśli 0zostanie przekazane, więc działa - O ile NIE jest wymagana wartość logiczna. Jak powiedział Kzqai, bardziej ogólnym rozwiązaniem jest użycie $bar = null, ponieważ można tego również użyć, gdy wartości $ bar są boolowskie. Test staje się następnie if (is_null($bar))lub if ($bar === null).
ToolmakerSteve

22

Kilka notatek, które również uznałem za przydatne:

  • Zachowaj wartości domyślne po prawej stronie.

    function whatever($var1, $var2, $var3="constant", $var4="another")
  • Domyślna wartość argumentu musi być stałym wyrażeniem. Nie może to być zmienna ani wywołanie funkcji.


14

Podaj opcjonalny argument wartość domyślną.

function date ($format, $timestamp='') {
}

10

Funkcja daty byłaby zdefiniowana mniej więcej tak:

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

    // Format the timestamp according to $format
}

Zwykle wstawiasz wartość domyślną w ten sposób:

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

Jednak tylko literały są prawidłowymi domyślnymi argumentami, dlatego użyłem nulljako domyślnego argumentu w pierwszym przykładzie, a nie $timestamp = time() , i połączyłem go z zerowym sprawdzaniem. Literały obejmują tablice ( array()lub []), logiczne, liczby, ciągi i null.


8

Jeśli nie wiesz, ile atrybutów należy przetworzyć, możesz użyć token ( ...) listy argumentów variadic wprowadzonej w PHP 5.6 ( zobacz pełną dokumentację tutaj ).

Składnia:

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

Na przykład:

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');

Jak widać, token zasadniczo zamienia wszystkie parametry w tablicę, którą można przetwarzać w dowolny sposób.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.