Liste als Funktionsparameter
Alex
- php
Schönen guten Tag!
Gibt es in PHP etwas, das quasi genau andersherum funktioniert als list? Ich möchte einer Funktion, die einzelne Parameter erwartet, diese in einem Array gesammelten Werte irgendwie übergeben (quasi das "ausgepackte Array", also als "anonyme Variablen").
Ist das möglich oder muß ich der Funktion doch die Arrayelemente, einzeln aufgezählt, übergeben?
Viele Grüße,
Alex
Hi Alex,
Ist das möglich oder muß ich der Funktion doch die Arrayelemente, einzeln aufgezählt, übergeben?
Ich weiß nicht, ob ich dich richtig verstanden haben, aber…
// Du hast eine Funktion die so aufgerufen wird:
the_function($param1, $param2, $param3);
// und möchtest sie lieber so aufrufen:
$params = array($param1, $param2, $param3);
the_function($params);
Wenn dem so ist, könntest du call_user_func_array() verwenden, die könnte z.B. so aussehen:
// normal:
mysql_connect('host', 'username', 'password');
// mit call_user_func_array()
$params = array('host', 'username', 'password');
call_user_func_array('mysql_connect', $params);
Einen direkten Sinn sehe ich in diesem Verfahren allerdings in der Form nicht.
Viele Grüße,
~ Dennis.
Grüß Dich, Dennis!
Ich weiß nicht, ob ich dich richtig verstanden haben, aber…
Ja, hast Du. :-)
Wenn dem so ist, könntest du call_user_func_array() verwenden
Danke für den Tip. Das geht nicht zufällig auch mit Konstruktoren (ohne Reflection, Aufruf aus einer Kindklasse oder den anderen komischen Hacks aus den Dokukommentaren)?
Viele Grüße,
Alex
echo $begrüßung;
Wenn dem so ist, könntest du call_user_func_array() verwenden
Danke für den Tip. Das geht nicht zufällig auch mit Konstruktoren (ohne Reflection, Aufruf aus einer Kindklasse oder den anderen komischen Hacks aus den Dokukommentaren)?
Ganz ohne Hack wird es nicht gehen. Aber vielleicht gefällt dir ja der hier:
<pre>
<?php
class Alex{
public $params = array();
function __construct() {
// keine Aktion beim Aufruf per new ohne Parameter
if (func_num_args()) {
foreach (func_get_args() as $arg)
$this->params[] = $arg;
}
return $this;
}
}
$params = array('SELF', 'HTML');
$alex = call_user_func_array(array(new Alex, '__construct'), $params);
var_dump($alex);
echo "$verabschiedung $name";
Grüß Dich, dedlfix!
Das geht nicht zufällig auch mit Konstruktoren (ohne Reflection, Aufruf aus einer Kindklasse oder den anderen komischen Hacks aus den Dokukommentaren)?
Ganz ohne Hack wird es nicht gehen. Aber vielleicht gefällt dir ja der hier: [...]
Das Verändern der Konstruktoren ist für mich leider keine Option, und von den betroffenen Klassen andere abzuleiten, die diesen Konstruktor implementieren, ist recht umständlich. Trotzdem vielen Dank für Deine Hilfe!
Viele Grüße,
Alex