Autor Zpráva
AM_
Profil
Zdravím,
udělal jsem si třídu pro zpracování událostí (podobně jako eventy např. v .NET), kterým mohu přidělovat callback funkce, které se ve chvíli spuštění události zavolají.
Zatím to řeším tak, že callbacku předávám jeden parametr asociativní pole, takže volání vypadá nějak takto:
    public function Raise($params = array()){
      foreach ($this->callbacks as $callback){
        $callback($params);
      }
    }

Elegantnější by ale bylo, kdyby callback mohl mít libovolný počet skutečných parametrů, nejen přes asociativní pole, takže kdyby měl např. 3 parametry, volal bych:
$callback($params[0], $params[1], $params[2]);

řešit to ale takhle - ručně to vypisovat - by bylo mnohem horší, než jak to mám ted, tak bych se chtěl zeptat, jestli neexistuje nějaká funkce/konstrukce, která by takto uměla funkci volat.

Našel jsem funkci call_user_func(), která umí volat callback s libovolnými parametry, ale se můj problém stává rekurzivní - musel bych nějak předat proměnný počet parametrů této funkci :) potřeboval bych spíš něco, co mi pole rozhází do jednotlivých parametrů, se kterými zavolá funkci.

Rád bych se také vyhnul věcem jako sestavení kódu do řetězce a následný eval(), protože to údajně dost snižuje výkon a obecně moc nejsem přítel této funkce kvůli bezpečnosti.
TomášK
Profil
http://cz.php.net/manual/en/function.call-user-func-array.php
Majkl578
Profil
nejsem si jisty, zda je to to co hledas. pokud neco ve smyslu flexibilniho poctu parametru (coz su myslim), tak existuji funkce func_get_args a func_num_args

pouzit se daji takto:
function testArgs() {
	$numOfParams = func_num_args();
	$params = func_get_args();
	var_dump($params);
}

testArgs('a', 'b', 'c', 'd');


a volat ji muzes pres call_user_func_array
function testArgs() {
	$numOfParams = func_num_args();
	$params = func_get_args();
	var_dump($params);
}

$data = array('a', 'b', 'c', 'd');
call_user_func_array('testArgs', $data);
AM_
Profil
TomášK
díky, to jsem hledal.
Majkl578
func_get_args a func_num_args jsem znal, ale právě jsem to potřeboval z druhé strany - ne číst ve funkci předem neznámý počet parametrů , ale předat jej předem neznámé callback funkci :)
Toto téma je uzamčeno. Odpověď nelze zaslat.