Gibt es eine Möglichkeit, optionale Parameterwerte in PHP anzugeben?
Lesezeit: 3 Minuten
Nehmen wir an, ich habe eine PHP-Funktion foo:
function foo($firstName="john", $lastName="doe") {
echo $firstName . " " . $lastName;
}
// foo(); --> john doe
Gibt es eine Möglichkeit, nur den zweiten optionalen Parameter anzugeben?
Beispiel:
foo($lastName="smith"); // output: john smith
PHP unterstützt per se keine benannten Parameter für Funktionen. Es gibt jedoch einige Möglichkeiten, dies zu umgehen:
Verwenden Sie ein Array als einziges Argument für die Funktion. Dann können Sie Werte aus dem Array ziehen. Dies ermöglicht die Verwendung von benannten Argumenten im Array.
Wenn Sie je nach Kontext eine optionale Anzahl von Argumenten zulassen möchten, können Sie func_num_args und func_get_args verwenden, anstatt die gültigen Parameter in der Funktionsdefinition anzugeben. Dann können Sie basierend auf der Anzahl der Argumente, Zeichenfolgenlängen usw. bestimmen, was zu tun ist.
Übergeben Sie einen Nullwert an jedes Argument, das Sie nicht angeben möchten. Man kommt nicht wirklich drum herum, aber es funktioniert.
Wenn Sie in einem Objektkontext arbeiten, können Sie die magische Methode __call() verwenden, um diese Arten von Anforderungen zu verarbeiten, sodass Sie basierend auf den übergebenen Argumenten an private Methoden weiterleiten können.
Obwohl es keine implizite Unterstützung gibt, gibt es bessere Problemumgehungen, als die akzeptierte Antwort vermuten lässt. Siehe Walfs Lösung unten. Es gibt mehr Details, wenn Sie es in meiner Lösung brauchen (was ich schwöre, dass ich unabhängig davon gekommen bin!)
– DJ Dave
15. Dezember 15 um 7:58 Uhr
PHP8 unterstützt jetzt benannte Parameter.
– Staubbeutel
26. Oktober 21 um 18:11 Uhr
ceejayoz
Eine Variation der Array-Technik, die eine einfachere Einstellung von Standardwerten ermöglicht:
foo(array('lastName' => 'smith')); // output: john smith
Für assoziative Arrays gilt: $arguments += $defaults; ist sauberer.
– Wal
11. Dezember 15 um 0:56 Uhr
Andrew G. Johnson
Sie könnten Ihren Code leicht umgestalten:
function foo($firstName = NULL, $lastName = NULL)
{
if (is_null($firstName))
{
$firstName="john";
}
if (is_null($lastName ))
{
$lastName="doe";
}
echo $firstName . " " . $lastName;
}
foo(); // john doe
foo('bill'); // bill doe
foo(NULL,'smith'); // john smith
foo('bill','smith'); // bill smith
Bill Karwin
Wenn Sie mehrere optionale Parameter haben, besteht eine Lösung darin, einen einzelnen Parameter zu übergeben, der ein Hash-Array ist:
Natürlich gibt es in dieser Lösung keine Überprüfung, ob die Felder des Hash-Arrays vorhanden oder richtig geschrieben sind. Es liegt an Ihnen, dies zu bestätigen.
Nein. Der übliche Weg, dies zu tun, besteht darin, mit einigen Heuristiken zu bestimmen, welcher Parameter impliziert wurde, wie z. B. Zeichenfolgenlänge, Typisierung usw.
Im Allgemeinen würden Sie die Funktion so schreiben, dass sie die Parameter in der Reihenfolge der am meisten erforderlichen bis zu den am wenigsten erforderlichen annimmt.
Heuristiken funktionieren nur zuverlässig, wenn Parameter vom Typ her unverwechselbar sind, wie es jQuery tut. Andere Methoden, wie die Zeichenfolgenlänge, sind ein Unfall, der darauf wartet, passiert zu werden.
– Wal
11. April 14 um 6:56 Uhr
Milan Babuskov
So wie du willst: nein.
Sie könnten ein spezielles Zeichen wie NULL verwenden, um darauf hinzuweisen, dass der Wert nicht angegeben wird:
function foo($firstName, $lastName="doe") {
if (is_null($firstName))
$firstName="john";
echo $firstName . " " . $lastName;
}
foo(null, 'smith');
Heuristiken funktionieren nur zuverlässig, wenn Parameter vom Typ her unverwechselbar sind, wie es jQuery tut. Andere Methoden, wie die Zeichenfolgenlänge, sind ein Unfall, der darauf wartet, passiert zu werden.
– Wal
11. April 14 um 6:56 Uhr
Ratte
PHP 8 hat benannte Argumente eingeführt, sodass es jetzt möglich ist, die an eine Funktion übergebenen Parameter anzugeben.