ugrás a tartalomhoz

dinamikus függvényhívás függvényben

paragliders · 2005. Szep. 5. (H), 18.55
A következőt szeretném elérni van egy függvényem(függvény1) amiben szeretnék dinamikusan függvényeket meghívni A fügvényben meghívott függvényeknek vanargumentummai is. A függvény1 hívásakor az argumentumaiban pedig azt adnám meg hogy milyen függvényt szeretnék meghívni és milyen argumentumokkal. A szöveget azért pl- vel tenném érthetőbbé:
<?php
function fuggveny1($argumentum1) 
{
 $argumentum1 // az argumentum1 függvény meghívása
}

fuggveny1("$arugmentum1(parameter1)")
Vagyis a pl szerint a fuggveny1 meghivásakor a fuggvenyben az argumentum1 függvényt hívnánk meg paraméterivel együtt.

Remélem hogy sikerült érthetően leírni, ha nem várom a kérdéseket. Egy két dologgal már probálkoztam, de nem igazán jött össze
 
1

call_user_func

attlad · 2005. Szep. 5. (H), 19.04
http://hu.php.net/manual/en/function.call-user-func.php

Attila
2

<Nincs cím>

paragliders · 2005. Szep. 5. (H), 20.41
Köszi ! Jó az ókfejtés én is gondoltam rá. Mondom hogy mi a bibi. Nézzük ugyancsak példával.
<?php
function fuggveny1($argumentum1)
{
 print $argumentum1();
}
// hivjuk meg a függvényünket a call_user_func() -al !

call_user_func('fuggveny1',"fuggveny2(parameter1)")
így meghívjuk a fuggveny1 -ben a fuggveny2 -t csak az a gond hogy ez így értelmezi fugveny2()() és nem tudjuk megadni a fuggveny2 paraméterét - ha nem kéne neki paramétert adni akkor nincs gond megy a függvény (kibpróbáltam) - de én paraméterrel szeretném meghívni a függvényemet
További ötlet ?
3

<Nincs cím>

attlad · 2005. Szep. 5. (H), 21.02
Nem így?

<?php

function fuggveny1($fuggveny, $parameter)
{
    call_user_func($fuggveny, $parameter);
}

fuggveny1('fuggveny2', 'parameter1');

?>
Van eval() is végső esetre:
http://hu.php.net/manual/en/function.eval.php

Attila
4

próba

paragliders · 2005. Szep. 5. (H), 22.33
Ki is próbáltam. First argument is expected to be valid argument. Szerintem a
fuggveny1('fuggveny2','parmeter1') ből a $fuggveny2 - t nem akarja megenni probáltam '' nélkül is úgy sem. Most megnézem ezt az eval() -t ez még új ;-) -hátha valami jó kisül belőle. Köszi
7

<Nincs cím>

dzsoni · 2005. Szep. 6. (K), 14.10
a működő hívás így néz ki:

if($z!="this") global ${$z};
if(method_exists($z, $y)) call_user_func_array(array(&$z, $y), array($params_should_be_passed_on));
$z az objektum
$y metódusnév

és az átadandó paramétereket bele kell tenni egy tömbbe! még akkor is ha az már egy tömb!!

remélem segítettem, üdv: robi
8

Nálam megy

attlad · 2005. Szep. 6. (K), 15.03
ha van fuggveny2 nevű függvény:

<?php

function fuggveny1($fuggveny, $parameter)
{
    call_user_func($fuggveny, $parameter);
}

fuggveny1('fuggveny2', 'parameter1');

function fuggveny2($p)
{
    echo $p;
}

?>
Attila
9

Így oldottam meg

paragliders · 2005. Szep. 7. (Sze), 10.44
Így nyugszik átviszi a paramétert is rendesen + minden jó és nem kapok hibát
Még egy finomítást végre akarok hajtani, ugyanis ezzel a verzióval csak egy paramétert tudok átadni, így a következő cél hogy több paramétert tudjak neki átadni. A több paraméteres megoldás valahogy úgy fog kinézni ahogy dzsoni megfogalmazta tőle vettem az & dolgot is, csak az ő példáját még át kell egy kicsit rágjam (elsőre sok volt).

Nagyon szépen köszönöm mindenkinek a segítséget !!!!!!
<?php

function fuggveny1($fuggveny, $parameter)
{
    call_user_func($fuggveny, &$parameter);
    
}

fuggveny1(fuggveny2,$parameter1);

function fuggveny2($p)
{
    echo $p;
}

?>
10

<Nincs cím>

dzsoni · 2005. Szep. 7. (Sze), 15.03
Az mindegy hogy 1 vagy több paramétert akarsz átadni, ha beleteszed őket egy tömbe. Ha átgondolod a fejlesztők azért várnak tömböt a paramétereknek, hogy pontosan sorrendben tudják átadni azt a kívánt metódusnak. Tehát ha 1 paramétert vár a metódusod akkor is bele illik rakni 1 tömbe mert biztos annak az indexein lépked végig a call_user_func() is.

Az előző pédám csak annyival van elbonyolítva, hogy azt objektumokból hívogatom meg és illik ellenőrizni hogy létezik e az adott objektum és annak van-e ilyen nevű metódusa, illetve ha nem saját metódust akarok meghívni akkor be kell húzni a global parancssal.
A global ${$objektum} sor annyit tesz, hogy az $objektum változó értékével azonos nevű változót akarok használni.

További jó munkát, sok sikert, üdv: robi
5

eval()

paragliders · 2005. Szep. 5. (H), 23.12
Az eval szimpatikus, és jónak tűnik. De nem értem a eval("\$str = \"$str\";"); (a manualból származó pl)sort hogy mi micsoda benne

Én így próbáltam megvalósítani:
<?php
function fuggveny1($rgumentum1)
{
 eval($argumentum1);
}
fuggveny1("fuggveny2(argumentum)");
Persze ez így tök hibás csak próba volt. Tudnál segíteni az eval() paraméterezésében a manual alapján nem értem hogy mi micsoda a példában :-(
Köszi
6

hagyd az eval()-t, ne kelljen kétszer mondani!

Hojtsy Gábor · 2005. Szep. 6. (K), 10.46
Először is nincs eval() a PHP-ben, ha mégis lenne, az érzéki csalódás. Nincs. [Jedi kézmozdulat] Nem láttad a PHP kézikönyvben.

Namost a call_user_func() teljesen jól kellene, hogy menjen, nem kellene ilyen könnyen feladni. Tessék kipróbálni először is konstans paraméterekkel, aztán továbblépni, ha az már megy. Lehet, hogy olyan függvény nevet adtál át neki, ami nincs is.