Wie erstellen Sie optionale Argumente in PHP?

189

Um die Syntax für Funktionen mit optionalen Parametern im PHP-Handbuch anzuzeigen, werden Klammern um jeden Satz abhängiger optionaler Parameter verwendet. Für die date()Funktion lautet das Handbuch beispielsweise:

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

Wobei $timestampein optionaler Parameter ist und wenn er leer gelassen wird, wird standardmäßig der time()Rückgabewert der Funktion verwendet.

Wie erstellen Sie optionale Parameter wie diese, wenn Sie eine benutzerdefinierte Funktion in PHP definieren?

gregh
quelle

Antworten:

253

Verwenden Sie ähnlich wie im Handbuch ein Gleichheitszeichen ( =) in Ihrer Definition der Parameter:

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}
Jeff Winkworth
quelle
function dosomething($var1, $var2, $optionalValue = null)Ich habe diese bessere Option gefunden.
Mohammad Zaid Pathan
52

Der Standardwert des Arguments muss ein konstanter Ausdruck sein. Es kann keine Variable oder ein Funktionsaufruf sein.

Wenn Sie diese Funktionalität jedoch benötigen:

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

Es $barwird natürlich nicht erwartet, dass dies ein Boolescher Wert ist.

Ross
quelle
1
Dies wird jedoch ausgewertet, ob 0 oder "false" an $ bar übergeben wurde.
Tyzoid
33
Null ist eine viel bessere Standardeinstellung.
Kzqai
3
@DooMMasteR, hier meinen Sie $bar === false- dies ist eine Aktion, die ausgeführt werden sollte, wenn dies standardmäßig der Fall $barist false. Dies vermeidet falsche Aktionen, wenn sie 0übergeben werden, so dass es funktioniert - WENN kein Boolescher Wert benötigt wird. Wie Kzqai sagte, ist die Verwendung einer allgemeineren Lösung $bar = null, da dies auch verwendet werden kann, wenn die Werte von $ bar boolesch sind. Der Test wird dann if (is_null($bar))oder if ($bar === null).
ToolmakerSteve
22

Einige Notizen, die ich auch nützlich fand:

  • Behalten Sie Ihre Standardwerte auf der rechten Seite.

    function whatever($var1, $var2, $var3="constant", $var4="another")
  • Der Standardwert des Arguments muss ein konstanter Ausdruck sein. Es kann keine Variable oder ein Funktionsaufruf sein.

gregh
quelle
14

Geben Sie dem optionalen Argument einen Standardwert.

function date ($format, $timestamp='') {
}
mk.
quelle
10

Die Datumsfunktion würde ungefähr so ​​definiert sein:

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

    // Format the timestamp according to $format
}

Normalerweise würden Sie den Standardwert wie folgt setzen:

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

Es sind jedoch nur Literale gültige Standardargumente, weshalb ich nullim ersten Beispiel nicht als Standardargument verwendet $timestamp = time()und es mit einer Nullprüfung kombiniert habe. Literale umfassen Arrays ( array()oder []), Boolesche Werte, Zahlen, Zeichenfolgen und null.

Lars Gyrup Brink Nielsen
quelle
8

Wenn Sie nicht wissen, wie viele Attribute verarbeitet werden müssen, können Sie ...das in PHP 5.6 eingeführte Token ( ) für die Liste variabler Argumente verwenden ( siehe vollständige Dokumentation hier ).

Syntax:

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

Beispielsweise:

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

Wie Sie sehen können, wandelt dieses Token im Grunde alle Parameter in ein Array um, das Sie nach Belieben verarbeiten können.

Gergely Lukacsy
quelle