dedlfix: PHP: Variablennamen erzeugen?

Beitrag lesen

Tach!

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):

Damit sind wir schon einen Schritt weiter, aber noch nicht an dem Punkt, an dem wir meines Erachtens eine Alternative zu VV nehmen können. Sicherheitstechnisch spricht da im Prinzip auch nichts dagegen, solange das alles fest kodiert ist und Anwender die Namen 'eins', 'zwei', et cetera nicht beeinflussen können.

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}
    };
    echo foo($params) . "\n";
}

Könnte es so klappen?

Sieht so aus.

Ließe sich der Code weiter vereinfachen?

Ja. Zum einen existiert foreach, zum anderen gibts ab PHP 5.6 die ...-Syntax

function bar(...$arg_list) { 
  $params = [];
  foreach($arg_list as $arg) { 
    $params[$arg] = $$arg; // oder ${$arg}
  }
  echo foo($params);
}

Man könnte auch funktional die Sache lösen, unter Verwendung von array_map(), aber das macht es in dem Fall nicht einfacher.

dedlfix.