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:

  1. 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.
  2. 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.
  3. Übergeben Sie einen Nullwert an jedes Argument, das Sie nicht angeben möchten. Man kommt nicht wirklich drum herum, aber es funktioniert.
  4. 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

Gibt es eine Moglichkeit optionale Parameterwerte in PHP anzugeben
ceejayoz

Eine Variation der Array-Technik, die eine einfachere Einstellung von Standardwerten ermöglicht:

function foo($arguments) {
  $defaults = array(
    'firstName' => 'john',
    'lastName' => 'doe',
  );

  $arguments = array_merge($defaults, $arguments);

  echo $arguments['firstName'] . ' ' . $arguments['lastName'];
}

Verwendung:

foo(array('lastName' => 'smith')); // output: john smith

  • Für assoziative Arrays gilt: $arguments += $defaults; ist sauberer.

    – Wal

    11. Dezember 15 um 0:56 Uhr


Gibt es eine Moglichkeit optionale Parameterwerte in PHP anzugeben
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

Gibt es eine Moglichkeit optionale Parameterwerte in PHP anzugeben
Bill Karwin

Wenn Sie mehrere optionale Parameter haben, besteht eine Lösung darin, einen einzelnen Parameter zu übergeben, der ein Hash-Array ist:

function foo(array $params = array()) {
    $firstName = array_key_exists("firstName", $params) ?
      $params["firstName"] : "";
    $lastName = array_key_exists("lastName", $params) ?
      $params["lastName"] : "";
    echo $firstName . " " . $lastName;
}

foo(['lastName'=>'smith']);

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


1643909647 723 Gibt es eine Moglichkeit optionale Parameterwerte in PHP anzugeben
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


1643909648 844 Gibt es eine Moglichkeit optionale Parameterwerte in PHP anzugeben
Ratte

PHP 8 hat benannte Argumente eingeführt, sodass es jetzt möglich ist, die an eine Funktion übergebenen Parameter anzugeben.

vor PHP8:

htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

nach PHP8:

htmlspecialchars($string, double_encode: false);

Bezug

.

758130cookie-checkGibt es eine Möglichkeit, optionale Parameterwerte in PHP anzugeben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy