Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 15 ] 
AutorSpráva
Offline

Správca fóra
Správca fóra
call_user_func() s viacerymi parametrami funkcie

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 10.06.2008 0:17

Mam taky problem s funkciou call_user_func(), konkretne s parametrami, ktore sa maju predat volanej funkcii a to ten, ze mi nejde odovzdat volanej funkcii viac ako jeden parameter nasledujucim sposobom:

Ide vlastne o to, ze z urcitych dovodov potrebujem volat rozne funkcie s roznym poctom parametrov pomocou jednej funkcie, cize napr:
Kód:
<?php
//vykona funkciu, ktorej meno je predane ako 1.parameter, ostatne parametre su parametre volanej funkcie
function spustiFunkciu($menoFunkcie)
{
   $args = zistiArgumenty();   //obsahuje retazec param1,param2,...
   call_user_func($menoFunkcie,$args);
}

function nasobenie($param1,$param2)
{
   echo $param1*$param2;
}

function sucet($param1,$param2,$param3)
{
   echo $param1+$param2+$param3;
}


spustiFunkciu("nasobenie",2,5);   //vystup by mal byt 10 ($args = "2,5")
spustiFunkciu("sucet",1,2,3);     //vystup by mal byt 6 ($args = "1,2,3")
?>


Problem vsak je v tom, ze $args berie ako jeden parameter volanej funkcie a nie ako dva (tri) argumenty, ako by som to v skutocnosti potreboval...

Normalne by sa to volalo cez
Kód:
call_user_func("nasobenie",2,5);

ale ja tu hodnotu "2,5" potrebujem ulozit do premennej a az tak predat funkcii call_user_func, pricom chcem, aby to zobrala ako 2 parametre...


Da sa to nejako efektivne vyriesit? Dik







_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.06.08
Prihlásený: 09.07.08
Príspevky: 39
Témy: 1
Príspevok NapísalOffline : 10.06.2008 0:50

tak si sprav vlastnu funkciu co to bude riesit. napr.

Kód:
function user_functions($name, $args)
{
   $func = $name . '(' . $args . ');';
   return eval($func);
}


potom ked definujes vlastnu funkciu napr sucin:

Kód:
function sucin($a, $b)
{
   echo $a * $b;
}


a budes ju chciet zavolat tak jej argumenty predas takto

Kód:
user_functions('sucin', '2,3');


cize v prvom predas meno funkcie a v dalsom predas argumenty danej funkcie ako jeden string


Offline

Správca fóra
Správca fóra
call_user_func() s viacerymi parametrami funkcie

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok Napísal autor témyOffline : 10.06.2008 9:57

jasne, tomu chapem, len problem je v tom, ze ked to mam v triede, tak volana metoda nic nevrati, neviem, mozno som tam mal niekde chybu, ale uz som to vyriesil inak... Vdaka za pomoc


Naposledy upravil stenley dňa 10.06.2008 12:22, celkovo upravené 1






_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Offline

Skúsený užívateľ
Skúsený užívateľ
call_user_func() s viacerymi parametrami funkcie

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 10.06.2008 10:10

preco by to nefungovalo ? pokial ti to nefunguje len v triede, tak logicky robis problem tam, ale v tom co si sem hodil ziadne prvky oop akosi nevidim







_________________
C#, PHP, ...
Offline

Správca fóra
Správca fóra
call_user_func() s viacerymi parametrami funkcie

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok Napísal autor témyOffline : 10.06.2008 11:08

samozrejme, ze tam nevidis ziadne prvky oop, lebo som to tu dal zjednodusene, aby sa skor pochopilo, co potrebujem :)







_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Offline

Skúsený užívateľ
Skúsený užívateľ
call_user_func() s viacerymi parametrami funkcie

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 10.06.2008 11:18

tak ono zalezi na tom, ako mas urobenu triedu a to ze si to dal sem zjednodusene aspon mne osobne o tom vela nepovie. ako urcite vies, tak chybicka moze byt napriklad v dvojbodke miesto bodkociarky a nic ti nepojde...
aspon podla mna je v tomto pripade proste nutnost dat sem originalny zdrojak a nie zjednodusene verzie :) chces myslim pomoct v oop, nie v zakladnom funkcionalnom programovani







_________________
C#, PHP, ...
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.06.08
Prihlásený: 09.07.08
Príspevky: 39
Témy: 1
Príspevok NapísalOffline : 10.06.2008 11:25

stenley: ked ti to islo normalne a nie v OOP tak chyba bola asi medzi stolickou a klavesnicou :P ale nie. ked uz si to teda nejak poriesil mohol by si sem dat aj riesenie keby to potreboval niekedy niekto dalsi ;)







_________________
XMPP(Jabber): k3tch@xmpp.sk
No money? No Credit? Eat shit!
Offline

Skúsený užívateľ
Skúsený užívateľ
call_user_func() s viacerymi parametrami funkcie

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 10.06.2008 11:27

tak tak, ako mod by si to mal vediet :P :lol:







_________________
C#, PHP, ...
Offline

Správca fóra
Správca fóra
call_user_func() s viacerymi parametrami funkcie

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok Napísal autor témyOffline : 10.06.2008 11:35

radsej nespamujte :) ale nie, ved som priznal, ze tam mozem mat niekde chybu a ked mi to nejde, tak tam zjavne aj nejaka bude...
tu je teda ten zdrojak (jadro principu):
Kód:
class Test
{
   public function getContent($methodName)
   {
      if(method_exists($this,$methodName))
      {
         $args = $this->getMethodArgs(func_get_args());
         $ret = eval('$this->'.$methodName.'('.$args.');');
         
         if(!empty($ret))
         {
            return $ret;
         }
      }
      return false;
   }
   
   private function vypis($param1,$param2)
   {
      return $param1.",".$param2;
   }
   
   private function getMethodArgs($args)
   {
      unset($args[0]);
      return implode(",",$args);
   }      
}

$a = new Test;
echo $a->getContent('vypis',5,10);

Ked tam najdete chybu, kvoli comu to nejde, budem vam vdacny :)







_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Offline

Skúsený užívateľ
Skúsený užívateľ
call_user_func() s viacerymi parametrami funkcie

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 10.06.2008 12:07

toto je cela trieda alebo mas este nieco ine ? odkial beries premennu $this ? atd...







_________________
C#, PHP, ...
Offline

Správca fóra
Správca fóra
call_user_func() s viacerymi parametrami funkcie

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok Napísal autor témyOffline : 10.06.2008 12:11

je to cely zdrojak, ale tiez zjednoduseny :) ale princip zostal ten isty, cize ked to nejde v tomto, nepojde to ani v povodnom... $this je specialna premenna, ktora "odkazuje" na dany objekt (vytvara sa automaticky) :)

//LOL uz som na to dosiel :D

chyba bola v tomto riadku:
Kód:
$ret = eval('$this->'.$methodName.'('.$args.');');

Namiesto toho malo byt:
Kód:
eval('$ret = $this->'.$methodName.'('.$args.');');


Naposledy upravil stenley dňa 10.06.2008 12:32, celkovo upravené 1






_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.06.08
Prihlásený: 09.07.08
Príspevky: 39
Témy: 1
Príspevok NapísalOffline : 10.06.2008 12:32

stenley: tak nakoniec mozno asi nebola chyba u teba :P pretoze ked dam v methode vypis namiesto return echo tak to zoberie a vypise na obrazovku. bohuzial to len vypise a nic ine sa s tym robit neda. return to akosi nechce zozrat :)







_________________
XMPP(Jabber): k3tch@xmpp.sk
No money? No Credit? Eat shit!
Offline

Správca fóra
Správca fóra
call_user_func() s viacerymi parametrami funkcie

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok Napísal autor témyOffline : 10.06.2008 12:33

uz som to vyriesil, vid vyssie :)







_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.06.08
Prihlásený: 09.07.08
Príspevky: 39
Témy: 1
Príspevok NapísalOffline : 10.06.2008 12:35

no dava to celkom zmysel :P podla toho co si pisal a toho co som pisal ja :D







_________________
XMPP(Jabber): k3tch@xmpp.sk
No money? No Credit? Eat shit!
Offline

Správca fóra
Správca fóra
call_user_func() s viacerymi parametrami funkcie

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok Napísal autor témyOffline : 10.06.2008 12:38

jj, vdaka za pomoc, tiez som dal nakoniec echo namiesto return a pekne to vypisalo, cize automaticky bol problem v riadku s eval... a potom ma to uz tuklo :wall:







_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Odpovedať na tému [ Príspevkov: 15 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. kupa tabletu rozdiel medzi parametrami

v Mobilné zariadenia

3

273

16.06.2014 15:28

Smith Wesson Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. mozem pouzit nabijacku s inymi parametrami?

v Elektronika

5

3150

25.05.2013 18:52

liqua1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kúpa nového nb - pomoc s parametrami

v Notebooky a netbooky

2

458

28.05.2019 12:36

pepkopav Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. smartfón so sci-fi parametrami príde z Fínska

v Novinky

2

530

10.09.2016 18:01

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Praca s viacerymi zalozkami

v Sieťové a internetové programy

2

369

28.12.2016 13:16

maRT Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. c++ nahradenie znaku viacerými znakmi

v Assembler, C, C++, Pascal, Java

11

513

14.11.2014 8:34

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Wifi Problem s viacerymi pripojenymi zariadeniami

v Siete

1

249

21.11.2014 7:31

Mego Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako prepojiť databázu s viacerými zdrojmi?

v Databázy

17

1048

14.01.2010 12:27

Googler1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nový čip pre systémy s viacerými GPU

v Novinky

4

1217

23.12.2008 0:56

Triminka Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. DLNA a video s viacerymi audio stopami

v Siete

0

616

21.11.2011 18:49

Daevid Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. K dispozícii beta Chrome 13 s viacerými novinkami

v Novinky

13

633

21.06.2011 16:54

mirom Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. RAID 1 na 1particii disku s viacerymi particiami

v Pevné disky a radiče

11

359

30.01.2014 1:47

harm22 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Linux 2.6.23 s viacerými veľkými zmenami

v Novinky

1

389

12.10.2007 8:47

JanoF Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. funkcie

v Assembler, C, C++, Pascal, Java

5

869

15.11.2007 9:57

sento Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Excel - funkcie

v Ostatné programy

0

424

24.02.2016 10:06

mio Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ajaxove funkcie

v JavaScript, VBScript, Ajax

13

811

11.05.2009 23:01

feko.yxo Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra