Ich habe eine PHP-Funktion, die eine variable Anzahl von Argumenten (mit func_num_args()
und func_get_args()
) akzeptiert , aber die Anzahl der Argumente, die ich an die Funktion übergeben möchte, hängt von der Länge eines Arrays ab. Gibt es eine Möglichkeit, eine PHP-Funktion mit einer variablen Anzahl von Argumenten aufzurufen ?
php
variadic-functions
nichts
quelle
quelle
Antworten:
Wenn Sie Ihre Argumente in einem Array haben, könnte Sie die
call_user_func_array
Funktion interessieren .Wenn die Anzahl der Argumente, die Sie übergeben möchten, von der Länge eines Arrays abhängt, bedeutet dies wahrscheinlich, dass Sie sie selbst in ein Array packen können - und dieses für den zweiten Parameter von verwenden können
call_user_func_array
.Elemente dieses Arrays, die Sie übergeben, werden dann von Ihrer Funktion als eindeutige Parameter empfangen.
Zum Beispiel, wenn Sie diese Funktion haben:
Sie können Ihre Parameter wie folgt in ein Array packen:
Rufen Sie dann die Funktion auf:
Dieser Code gibt die Ausgabe aus:
dh 3 Parameter; genau wie die Funktion wurde so genannt:
quelle
Dies ist jetzt mit PHP 5.6.x unter Verwendung des Operators ... möglich (in einigen Sprachen auch als Splat-Operator bezeichnet):
Beispiel:
quelle
In einem neuen Php 5.6 können Sie
... operator
anstelle von verwendenfunc_get_args()
.Auf diese Weise können Sie alle Parameter abrufen, die Sie übergeben:
quelle
Seit PHP 5.6 kann mit dem
...
Operator eine variable Argumentliste angegeben werden.Wie Sie sehen können,
...
sammelt der Operator die variable Liste der Argumente in einem Array.Wenn Sie die Variablenargumente an eine andere Funktion übergeben müssen,
...
kann Ihnen das trotzdem helfen.Seit PHP 7 kann die variable Liste von Argumenten gezwungen werden , sein alle vom gleichen Typ zu.
quelle
Für diejenigen, die nach einer Möglichkeit suchen, dies zu tun mit
$object->method
:Dies gelang mir in einer Konstruktfunktion, die eine Variable method_name mit variablen Parametern aufruft.
quelle
$object->method_name(...$array);
$object->method_name(&...$args);
Sie können es einfach nennen.
Ausgabe:
Array ([0] => bla) Array ([0] => bla [1] => bla)
quelle
Ich bin überrascht, dass niemand hier erwähnt hat, einfach ein Array zu übergeben und zu extrahieren . Z.B:
Dies bietet natürlich keine Argumentvalidierung . Dafür kann jeder meine Erwartungsfunktion verwenden: https://gist.github.com/iautomation/8063fc78e9508ed427d5
quelle
Eine alte Frage, ich weiß, aber keine der Antworten hier ist wirklich gut darin, einfach die Frage zu beantworten.
Ich habe gerade mit PHP herumgespielt und die Lösung sieht so aus:
Diese Funktion kann zwei Dinge tun:
Wenn es nur mit dem erforderlichen Parameter aufgerufen wird:
myFunction("Hi")
Es wird "Hi default" ausgegeben.Aber wenn es mit dem optionalen Parameter aufgerufen wird:
myFunction("Hi","me")
Es wird "Hi me" ausgegeben;Ich hoffe, das hilft jedem, der dies später sucht.
quelle
Hier ist eine Lösung mit der magischen Methode __invoke
(Verfügbar seit PHP 5.3)
Aus derselben Klasse:
Aus einer Instanz eines Objekts:
quelle
call_user_func_array
wie in der Antwort mit der höchsten Abstimmung im Jahr 2009 angegeben. Vielleicht ist es sinnvoll, ein Extra darum zu wickeln__invoke
- aber ich sehe es nicht.