echo $begrüßung;
Ich möchte die Werte eines Arrays (in der Anzahl unbestimmt, auch 0 möglich) als einzelne Argumente einer Funktion weitergeben.
Natürlich könnte ich auch einfach dass Array weitergeben, allerdings ist dann die Userfreundlichkeit nicht so toll. Das Problem liegt dabei dass die Funktion sowohl von "Hand" als auch von verschiedenen anderen Funktionen aufgerufen wird, deshalb diese Frage!
Einige Lösungen kamen ja schon. Ich versuche mal alles aufzuzählen, was möglich ist. (Beschreibungen der nachfolgend genannten Funktionen siehe Function Handling Functions)
Funktionen können Parameter haben. Soweit nichts neues. Parameter können auch optional sein, wenn sie mit einem Default-Wert deklariert werden.
function foo($param1 = defaultwert, $param2 = defaultwert)
Auch das ist relativ bekannt. Bekannt ist auch, dass man so nur eine feste Anzahl an Parametern definieren kann. Weniger bekannt ist, dass man beim Aufruf einer Funktion beliebig viele Parameter zusätzlich zu den deklarierten Parametern übergeben kann. Innerhalb der Funktion kann man darauf (beziehungsweise auf alle Parameter) mit func_get_arg(), func_get_args() und func_num_args() zugreifen.
Weiß man beim Schreiben eines Aufrufs einer Funktion noch nicht, wieviele Parameter man zur Laufzeit übergeben möchte, und ist die Funktion für die Auswertung einer beliebigen Anzahl von Parametern vorbereitet, dann kann man mit call_user_func_array() die Funktion so aufrufen, dass die in einem Array liegenden Werte als jeweils ein Parameter übergeben werden. (Geht natürlich auch, wenn die Funktion eine feste Anzahl Parameter erwartet und man ebendiese Anzahl im Array stehen hat.)
Funktionsüberladung kennt PHP nicht. (Der Begriff Overloading ist PHP zwar bekannt, wird aber für etwas anderes verwendet.) Da jedoch Variablen und Parameter nicht typisiert sind, kann man ja mal dies, mal jenes übergeben.
Dabei mögen sich bei nicht wenigen, mit typisierten Sprachen aufgewachsenen Programmierern die Nackenhaare sträuben, doch das wird dem PHP egal sein. Letztlich bedeutet das weniger Aufwand als ein Aufruf von call_user_func_array(), sowohl für Verwender als auch für PHP. So gehts:
Wenn die (maximale) Anzahl der Funktionsparameter bekannt ist, dann deklarier mindestens die restlichen Parameter ab dem zweiten mittels Defaultwerten als optional. Ermittle für den ersten Parameter, ob dieser ein Array ist (is_array()). Wenn ja, stehen deine Werte darin und die optionalen Parameter können unbeachtet bleiben. Ansonsten stehen alle Werte einzeln in den Parameter-Variablen.
Das kann man natürlich auch mit func_get_args() kombinieren, dann hat man die Parameter immer in einem Array. Entweder im ersten Parameter oder über func_get_args() geliefert.
function foo($params) {
if (!is_array($params))
$params = func_get_args();
// in $params stehen nun für beide Fälle alle übergebenen Werte.
// kann man, wenn man will, mit list() in einzelne Variablen aufteilen.
}
Aufrufbar:
$values = array($value1, $value2, $value3);
foo($values)
oder
foo($value1, $value2, $value3);
echo "$verabschiedung $name";