Mahlzeit,
Im Code (eines Templates für ein CMS - bitte fragt nicht nach dem Sinn...) wird immer wieder der Aufruf einer Funktion foo() nötig, die als Argument ein Array in dieser Form erwartet (und einen String zurückgibt):
echo foo(array( 'eins' => $eins, 'zwei' => $zwei, 'drei' => $drei, )) . "\n";
das sieht für mich doch einigermaßen vernünftig aus. Was gefällt dir daran nicht?
Die Aufrufe dieser Funktion brauchen meist größere Arrays und längere Strings, haben jedoch immer diese Form. Um das Coden zu vereinfachen, wollte ich daher alternativ die folgende Funktion bar() verwenden, deren Aufruf nur eine einfache Liste von String-Argumenten erfordert
Das hat einen Haken. Du musst eine gewisse Anzahl globale Variablen hegen und pflegen, die so heißen wie die Arrayeinträge, die foo() erwartet. Globale Variablen möchte man aber normalerweise so weit wie möglich vermeiden.
bar('eins', 'zwei', 'drei'); vgl. dazu im Manual.
function bar(){ $numargs = func_num_args(); $arg_list = func_get_args(); $params = array[]; for ($i = 0; $i < $numargs; $i++) { $key = $arg_list[$i]; $params[$key] = ${$key} ; // <<< hier fehlte mir die Kenntnis der Syntax ${$key} // PROBLEM!! }; echo foo($params) . "\n"; }
An der mit "PROBLEM" markierten Stelle greifst du aus der Funktion heraus auf globale Variablen zu. Das geht aber nicht so ohne weiteres; du müsstest sie eigentlich zu Beginn der Funktion mit dem Schlüsselwort global bekanntmachen, sozusagen in die Funktion importieren. Das geht aber auch nicht, wenn du ihre Namen nicht kennst.
Du könntest stattdessen auf $_GLOBALS['name'] zugreifen, dann hätte sich das ganze Gezappel mit variablen Variablen erledigt. Schöner oder besser wird das Konzept davon aber nicht.
Ich kenn den restlichen Code drumherum nicht. Aber vermutlich würde ich ein Array vorhalten, das die von foo() erwarteten Einträge besitzt, jeweils bedarfsweise die Felder dieses Arrays setzen (anstatt der einzelnen globalen Variablen), und dann das Array als Ganzes an foo() übergeben.
So long,
Martin
Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
- Douglas Adams, The Hitchhiker's Guide To The Galaxy