Wie oben erwähnt, können Sie keine Parameter überspringen. Ich habe diese Antwort geschrieben, um einen Nachtrag zu liefern, der zu groß war, um ihn in einen Kommentar aufzunehmen.
@Frank Nocke schlägt vor , die Funktion mit ihren Standardparametern aufzurufen, also zum Beispiel mit
function a($b=0, $c=NULL, $d=''){ //...
du solltest benutzen
$var = a(0, NULL, 'ddd');
Dies entspricht funktional dem Weglassen der ersten beiden ( $b
und $c
) Parameter.
Es ist nicht klar, welche 0
Standardeinstellungen sind (wird eingegeben, um den Standardwert bereitzustellen, oder ist es wichtig?).
Es besteht auch die Gefahr, dass das Problem mit den Standardwerten mit der externen (oder integrierten) Funktion verbunden ist, wenn die Standardwerte vom Autor der Funktion (oder Methode) geändert werden können. Wenn Sie also Ihren Aufruf im Programm nicht ändern würden, könnten Sie sein Verhalten unbeabsichtigt ändern.
Eine Problemumgehung könnte darin bestehen, einige globale Konstanten zu definieren, z. DEFAULT_A_B
B. "Standardwert des B-Parameters der Funktion A" und "Auslassen" der folgenden Parameter:
$var = a(DEFAULT_A_B, DEFAULT_A_C, 'ddd');
Für Klassen ist es einfacher und eleganter, wenn Sie Klassenkonstanten definieren, da diese Teil des globalen Bereichs sind, z.
class MyObjectClass {
const DEFAULT_A_B = 0;
function a($b = self::DEFAULT_A_B){
// method body
}
}
$obj = new MyObjectClass();
$var = $obj->a(MyObjectClass::DEFAULT_A_B); //etc.
Beachten Sie, dass diese Standardkonstante im gesamten Code genau einmal definiert wird (selbst in der Methodendeklaration gibt es keinen Wert). Bei unerwarteten Änderungen geben Sie der Funktion / Methode daher immer den korrekten Standardwert an.
Die Klarheit dieser Lösung ist natürlich besser als rohen Standardwert liefert (wie NULL
, 0
etc.) , die nichts zu einem Leser sagen.
(Ich bin damit einverstanden, dass ein Anruf wie $var = a(,,'ddd');
die beste Option wäre)