Ich habe eine PHP-Funktion geschrieben, die 10 Parameter akzeptiert, aber nur 2 sind erforderlich. Manchmal möchte ich den achten Parameter definieren, aber ich möchte keine leeren Zeichenfolgen für jeden der Parameter eingeben, bis ich den achten erreicht habe.
Eine Idee, die ich hatte, war, eine abstrahierte Funktion mit einem Array von Parametern zu übergeben, die sie an die reale Funktion weitergibt.
Gibt es eine bessere Möglichkeit, die Funktion so einzurichten, dass ich nur die gewünschten Parameter übergeben kann?
php
function
parameter-passing
user481826
quelle
quelle
Antworten:
Lassen Sie die Funktion einen Parameter annehmen: ein Array. Übergeben Sie die tatsächlichen Parameter als Werte im Array.
Bearbeiten: Der Link in Pekkas Kommentar fasst es fast zusammen.
quelle
In diesem Fall habe ich ein Array übergeben, wobei der Schlüssel der Parametername und der Wert der Wert ist.
quelle
Um das zu erreichen, was Sie wollen, verwenden Sie ein Array, wie Rabbot sagte (obwohl dies bei übermäßiger Verwendung zu einem Problem beim Dokumentieren / Verwalten werden kann). Oder verwenden Sie einfach die traditionellen optionalen Argumente.
Normalerweise stelle ich jedoch fest, dass wenn ich anfange, eine Funktion / Methode mit so vielen Argumenten zu schreiben - meistens handelt es sich um einen Codegeruch, der in etwas viel Saubereres umgewandelt / abstrahiert werden kann.
quelle
In PHP 5.6 und höher können Argumentlisten das Token ... enthalten, um anzuzeigen, dass die Funktion eine variable Anzahl von Argumenten akzeptiert. Die Argumente werden als Array an die angegebene Variable übergeben. beispielsweise:
Beispiel Verwenden von ..., um auf variable Argumente zuzugreifen
Das obige Beispiel gibt Folgendes aus:
Argument mit variabler Länge listet die PHP-Dokumentation auf
quelle
Sie können den Standardwert einfach auf null setzen.
quelle
null
die Nicht-Bits des Datumstyps ersetzen . Zum Beispielarray()
für ArraysHINWEIS: Dies ist eine alte Antwort für PHP 5.5 und niedriger. PHP 5.6+ unterstützt Standardargumente
In PHP 5.5 und niedriger können Sie dies mit einer der beiden folgenden Methoden erreichen:
Wie benutzt man
Ich bevorzuge die zweite Methode, weil sie sauber und leicht zu verstehen ist, aber manchmal benötigen Sie möglicherweise die erste Methode.
quelle
$x = null; if ($x) echo "true"; else echo "false";
"false" aus, auch wenn $ x var einen Wert hat ("null" in diesem Code). Außerdem verwenden wir in beiden Methoden den ternären Operator, sodass nur ein "=" verwendet wird. Wenn Sie mit testenmethod(); method(1); method(1, 2);
, ordnet der erste Aufruf arg1 und arg2 den Standardwerten zu, der zweite Aufruf ordnet das zweite arg dem Standardwert und "1" für das erste Argument zu. Beim letzten Aufruf werden keine Standardwerte zugeordnet.Ich denke, Sie können Objekte auch als Parameter-Transporte verwenden.
Natürlich müssen Sie in dieser Funktion Standardwerte für "optParam8" und "optParam2" festlegen. In anderen Fällen erhalten Sie "Hinweis: Undefinierte Eigenschaft: stdClass :: $ optParam2".
Wenn Sie Arrays als Funktionsparameter verwenden, möchte ich auf diese Weise Standardwerte festlegen:
quelle
Wenn nur zwei Werte erforderlich sind, um das Objekt mit einem gültigen Status zu erstellen, können Sie einfach alle anderen optionalen Argumente entfernen und Setter für sie bereitstellen (es sei denn, Sie möchten nicht, dass sie zur Laufzeit geändert werden). Instanziieren Sie dann einfach das Objekt mit den beiden erforderlichen Argumenten und legen Sie die anderen nach Bedarf über den Setter fest.
Weiterführende Literatur
quelle
Ich weiß, dass dies ein alter Beitrag ist, aber ich hatte ein Problem wie das OP und das habe ich mir ausgedacht.
Beispiel für ein Array, das Sie übergeben könnten. Sie können dies erneut bestellen, wenn eine bestimmte Bestellung erforderlich ist. Bei dieser Frage wird jedoch das getan, was gefragt wird.
Dies ist überschaubar, leicht zu lesen und die Datenextraktionspunkte können jederzeit an einer beliebigen Stelle in der Codierung hinzugefügt und entfernt werden, ohne dass ein massives Umschreiben erforderlich ist. Ich habe Ganzzahlschlüssel verwendet, um mit der ursprünglichen OP-Frage übereinzustimmen, aber Zeichenfolgenschlüssel konnten genauso einfach verwendet werden. In der Tat würde ich es aus Gründen der Lesbarkeit empfehlen.
Stecken Sie dies zur Vereinfachung in eine externe Datei
Setzen Sie dies am Anfang, wenn die Datei.
Verwenden Sie diese einfach, um das nächste Datenelement zuzuweisen. Verwenden Sie die Nummerierung / Benennung entsprechend der Herkunft der Daten.
Und schließlich das Array übergeben
quelle
Sie können eine reguläre Funktion erstellen und dann Ihre optionalen Variablen hinzufügen, indem Sie ihnen einen Standardwert von Null geben.
Eine Null ist immer noch ein Wert. Wenn Sie die Funktion nicht mit einem Wert für diese Variable aufrufen, ist sie nicht leer, also kein Fehler.
quelle
Wenn Sie normalerweise nur den 8. Wert übergeben, können Sie Ihre Parameter neu anordnen, sodass dies der erste ist. Sie müssen nur Parameter bis zum letzten festlegen, den Sie einstellen möchten.
Wenn Sie unterschiedliche Werte verwenden, haben Sie zwei Möglichkeiten.
Eine Möglichkeit besteht darin, eine Reihe von Wrapper-Funktionen zu erstellen, die unterschiedliche Parameter verwenden und die Standardeinstellungen für die anderen festlegen. Dies ist nützlich, wenn Sie nur wenige Kombinationen verwenden, aber schnell sehr unordentlich werden können.
Die andere Option besteht darin, ein Array zu übergeben, in dem die Schlüssel die Namen der Parameter sind. Sie können dann einfach mit einem Schlüssel prüfen, ob das Array einen Wert enthält, und wenn nicht, den Standardwert verwenden. Aber auch dies kann chaotisch werden und viel zusätzlichen Code hinzufügen, wenn Sie viele Parameter haben.
quelle
PHP erlaubt Standardargumente ( Link ). In Ihrem Fall können Sie alle Parameter von 3 bis 8 je nach Funktionscode als NULL oder als leere Zeichenfolge "" definieren. Auf diese Weise können Sie die Funktion nur mit den ersten beiden Parametern aufrufen.
Beispielsweise:
quelle
echo " this is arg3: " . $arg3;
usw.), wird der Aufruf z . B.yourFunction(3, 2, $arg8=5);
gedruckt32 this is arg3: 5
. Das Problem besteht darin, dass die Parameterposition weiterhin wichtig ist, wenn optionale Parameter in PHP ... Parameternamen übergeben werden reichen nicht aus , um Parameterwerte ParameternamenSetzen Sie einfach Null, um Parameter zu ignorieren, die Sie nicht verwenden möchten, und stellen Sie dann den erforderlichen Parameter entsprechend der Position ein.
quelle
quelle
default
ist ein Schlüsselwort in PHP .