Autor | Zpráva | ||
---|---|---|---|
mila Profil |
#1 · Zasláno: 21. 11. 2005, 16:42:53
Nevíte, zda se dá nějak zjistit název třidy z metody, která je volána staticky ( foo::bar() )?
Normálně to udělám get_class($this), ale takto není proměná $this definována. Díky. |
||
xixli Profil |
#2 · Zasláno: 21. 11. 2005, 17:40:12
žeby echo __CLASS__ ?
|
||
xixli Profil |
#3 · Zasláno: 21. 11. 2005, 17:55:51
btw keď voláš zvonku foo::bar() tak vieš názov triedy
|
||
mila Profil |
#4 · Zasláno: 21. 11. 2005, 18:12:47
__CLASS__ znám, to funguje ale trochu jinak. Vypíše to, v jaké třídě byla metoda definována, ne z které je volána. Což je velký rozdíl. Př.
class a { function test () { echo __CLASS__; } } class b extends a { ... } b::test(); //vypíše a; Kdyby mi toto stačilo, tak tam prostě dám echo "a" :) Jde mi o to, že chci aby každá třída měla metodu debug. Ta dostane text, a pokud je debug on, pak ho vypíše společně s názvem třídy. Takže tuto konstrukci potřebuji hned dvakrát: -Abych mohl zavolat něco jako get_class($this)::debug('...'). -A aby pak debug věděl, kam patří. Samozřejmě budu rád i za jiný způsob, jak tento debuging vyřešit. |
||
xixli Profil |
#5 · Zasláno: 22. 11. 2005, 15:59:33 · Upravil/a: xixli
Ja osobne debugging riešim buď cez __destruct + podmienka či ho robiť, alebo cez nejakú významnú funkciu (ktorá je vlastne volaná ako posledná). Mám triedu debugging a funkciu addInfo ktorá mi prosto pridá nejaké tie debug dáta. Ďalej mám triedu manager ktorá sa mi stará o viacero vecí (templaty, pluginy, konfigy, ...) a tá rozhodne či sa bude vkladať debugging ; jednotlivé triedy volajú debugging->addInfo so svojimi dátami, ktorými chcú prispieť. Potom je ešte funkcia shutdown(), ktorú volám na konci skriptu (nemám dobré skúsenosti s register_shutdown_function a __destruct sa nemusí volať na úplnom konci exekúcie skriptu) - tá mi volá debugging->getDebug
Na to dedenie by som to riešil tak, že by som prepísal funkciu debug - nezdedila by sa. Teda __CLASS__ by nebol a ale b. Prípadne by si mohol spraviť tak, že budeš mať funkcie debug() a debugClass() - jedno by ti dalo normálne informácie a druhé len triedu (nededil by sa len debugClass() ). Predtým som experimentoval s myšlienkami debuggingu ako získať všetky dáta cez get_declared_classes(), ale tam by som musel dávať aj prefixy (aby som nevolal náhodou php debugging ;-) ). Potom som sa hral s tým, že by som všetky inštancie tried pomenovával ako triedu, ale to sa mi tiež nepáčilo ;-) a tak som to spravil tak, ako som už zmienil vyššie. Prípadne píš na icq |
||
mila Profil |
#6 · Zasláno: 22. 11. 2005, 17:16:49 · Upravil/a: mila
Díky za odpověď.
Popravdě jsem se na to už vykašlal, protože nebudu trávuit většinu času tím, aby mi debug vypisoval název třídy. Pokud jde o tvoje řešení, tak to je o něčem trochu jiném. Nezajímal mě ani tak konkrétní mechanismus debugingu (zda je to echo, nebo funkce volaná na konci skriptu), ale jak mu dodat informaci o třídě, odkud zpráva pochází. Methoda debug by mohla vypadat třeba takto:
Jde o to, abych tomu debugingu dal název třídy o kterou se jedná a nemusel ji manuálně všude psát. Jiný příklad, k čemu bych to chtěl - chyby. Pokud něco nevyjde, chtěl bych vrátit chybu:
Mám tam nějaký objekt $log, do kterého je třeba chybu zapsat. A hodila by se opět vědět třída, abych chybu snadno dohledal. Tohle by mělo všechno fungovat, dokud nezačnu volat funkce staticky:( Vždyť to není tak velký požadavek, abych zjistil, jakou třídu jsem zavolal, ne? |
||
xixli Profil |
#7 · Zasláno: 22. 11. 2005, 19:11:40 · Upravil/a: xixli
No asi aj áno, keď to chceš zistiť zo statického volania z class::foo()
ale ako som hovoril, poznáš meno triedy. Možno by si mohol volať takto class::foo('class') // class je meno triedy, teda mu vlastne povies, ako sa vola trošičku bolo o tom aj tu: [url=http://www.dgx.cz/trine/item/php-hadanka-vi-zjisteni-nazvu-tridy ]http://www.dgx.cz/trine/item/php-hadanka-vi-zjisteni-nazvu-tridy [/url] no ja to riešim na vlastnom cms takto:
teda ja natvrdo vypisujem meno triedy - meno triedy manager budem menit tak raz za sto rokov :-) a potom pokračujem v ostatných triedach štýlom
|
||
llook Profil |
#8 · Zasláno: 23. 11. 2005, 14:24:32
V PHP4 to jde zjistit z debug_backtrace, ale v PHP5 to už nejde. Viz http://llook.wz.cz/weblog/spot/staticky-nazev-tridy
Jediné co mě teď napadá je to logování dělat takhle ošklivě: $this->debug(__CLASS__, 'zpráva'); |
||
mila Profil |
#9 · Zasláno: 23. 11. 2005, 15:39:36
Děkuji moc, to je přesně, co jsem hledal. A v diskuzi jsem tam našel skoro přesně to, co jsem chtěl psát.
Mimochodem, je to i odpověď na další otázku, co jsem se právě chystal položit:) |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0