Autor | Zpráva | ||
---|---|---|---|
joe Profil |
Zdravím,
nevíte někdo jestli jde zjistit typ parametru v mětodě? public function test(string $name) {} Chtěl bych zjistit, že parametr $name je typu string, jde to? Něpřišel jsem na to, tak jestli to PHP vůbec umí? |
||
Radim24 Profil |
#2 · Zasláno: 18. 7. 2009, 17:06:08
Já sice s tímhle nepracuju ale asi bych zkusil is_str(func_get_arg(0));
|
||
Nox Profil |
#3 · Zasláno: 18. 7. 2009, 17:06:32 · Upravil/a: Nox
Buď to nechápu, anebo... http://cz.php.net/manual/en/function.is-string.php ?
Jde o známý argument, takže by šlo is_string($name) |
||
joe Profil |
#4 · Zasláno: 18. 7. 2009, 17:10:47
Potřeboval bych to mimo tu metodu, takže nějak přes Reflection. Ale tam jsem o typu parametrů nic nenašel.
|
||
Mastodont Profil |
#5 · Zasláno: 18. 7. 2009, 18:08:12
joe
V hlavičce metody nemůžeš určit, že parametr má být typu string, takže to nejde ani zjistit. |
||
fuckin Profil |
#6 · Zasláno: 18. 7. 2009, 19:20:10
joe
muzes to udelat az v te metode nebo jeste pred aktivovanim metody, v hlavicce to nelze. Resil bych to nejak takto $name = is_string($name) ? $name : null; If (isset($name)) { $this->test($name) } else { die(" parametr neni string ! "); } |
||
joe Profil |
#7 · Zasláno: 18. 7. 2009, 21:13:58
Mastodont
Proč bych to nemohl určit? Byl to zrovna špatný příklad, ale můžu si zvolit v mětodě, jaký typ má být paramter. V tom případě co jsem napsal, bych tam mohl dosadit jen instanci třídy string. fuckin Dal jsem špatný příklad. Nejde mi konkrétně o string. Může tam být jakýkoli typ a já jen chci zjistit jakou instanci které třídy tam mohu použít. |
||
Mastodont Profil |
#8 · Zasláno: 18. 7. 2009, 21:39:24
joe
Můžeš tam zadat jen Array nebo třídu, ne hodnotové typy. |
||
joe Profil |
#9 · Zasláno: 18. 7. 2009, 21:43:17 · Upravil/a: joe
Mastodont
Proč myslíš? Možná v nějaké starší verzi PHP a nebo si nerozumíme :) <?php function test (A $a) { echo $a->var; } class A { public $var; public function __construct() { $this->var = "promenna"; } } $a = new A(); test($a); EDIT: A teď bych právě chtěl vědět, jakého typu musí být proměnná $a (ten parametr ve funkci test() - tedy konkrétně tady, že musí být instancí třídy A) |
||
fuckin Profil |
#10 · Zasláno: 18. 7. 2009, 22:18:15
var_dump($a); |
||
Mastodont Profil |
#11 · Zasláno: 18. 7. 2009, 22:33:47
joe
Ty nerozumíš, A je třída. Zkus si tam dát int .. |
||
joe Profil |
#12 · Zasláno: 18. 7. 2009, 22:50:09
fuckin
Nejsem věštec :-) Mastodont Já rozumim moc dobře, proto se taky ptám. To je jasné, že to nepůjde, když tam dám int, string, array nebo cokoli jiného kromě instance třídy A. Já jen chci zjistit, jakého typu má být ten parametr. Chápeš? :-) Nejsem si jistý, tak trochu jinak. Jsou dány třeba následující funkce: function testA(A $a) {...} function testAB(A $a, B $b) {...} function testABC(A $a, B $b, C $c) {...} Tyhle funkce znám a zjistim si, kolik parametrů potřebuji, abych je mohl zavolat. Ale k tomu počtu parametrů chci taky ještě zjistit jakého typu jsou ty vstupní parametry. Takže chci zjistit přesně tohle: testA() - jeden vstupní parametr, který musí být instancí třídy A testAB() - dva vstupní parametry, první instancí třídy A a druhý instancí třídy B testABC() - tři vstupní parametry, první instancí třídy A, druhý instancí třídy B a třetí instancní třídy C A to všechno chci zjistit mimo tyhle funkce. Snad jsem to už jasně vysvětlil... |
||
fuckin Profil |
#13 · Zasláno: 18. 7. 2009, 22:55:16
je mozne nakam ty udaje ulozit a pak je pri zpracovani nacist abys poznal jak s kterou metodou pracovat?
|
||
joe Profil |
#14 · Zasláno: 18. 7. 2009, 22:59:04
fuckin
To klidně můžu, ale tak jsem to řešit právě nechtěl... To bych musel ke každý metodě někde ukládat další informace, v nejhorším případě to tak asi udělám. |
||
Mastodont Profil |
#15 · Zasláno: 18. 7. 2009, 23:37:29
joe
No tak když je to jasné, proč v první otázce uvádíš zrovna "string"?? Co potřebuješ, je třída ReflectionParameter, ta vrací typ v GetName. |
||
joe Profil |
#16 · Zasláno: 18. 7. 2009, 23:45:50 · Upravil/a: joe
Mastodont
„proč v první otázce uvádíš zrovna "string"??“ A není to jedno? Třídu string si můžu napsat. „ta vrací typ v GetName.“ Nevrací, vrací jen název parametru a ten je string < pokud to je u tebe jinak, pak mi prosím napiš jak? |
||
Mastodont Profil |
#17 · Zasláno: 18. 7. 2009, 23:52:12
Sorry, getClass. Vyzkoušej si Example #3 ze http://cz2.php.net/manual/en/language.oop5.reflection.php
|
||
Lamicz Profil |
#18 · Zasláno: 19. 7. 2009, 04:54:45
joe: Lidi, nedejte s tím OOP psí kusy, takový věci nejsou normálně vůbec potřeba. Tohle mi smrdí špatným OOP návrhem.
|
||
joe Profil |
#19 · Zasláno: 19. 7. 2009, 18:08:53
Mastodont
Jéé, díky. Tak tuhme metodu jsem nějak omylem vyřadil, ani nevím proč. Přesně to jsem potřeboval, díky. Lamicz I v případě, že si takové metody může psát sám programátor a chci mu jen usnadnit práci tim, že v každé metodě nemusí parametr přetypovávat? ;-) Já stojím za jednoduchostí, nemám rád obrovské OOP. |
||
Časová prodleva: 15 let
|
0