Autor | Zpráva | ||
---|---|---|---|
enoice Profil |
#1 · Zasláno: 10. 7. 2007, 15:14:06
Ahoj,
rozhodl jsem se, že si v php napíšu takové pomůcky pro webdesign, například práci s databází nebo obrázky tak jak mi vyhovuje. Filozofie byla taková, že by byla hlavní třída, která by obsahovala objekty, které by byly instancemi dalších tříd (database, image, file,...) což by problém nebyl... problém přichází, pokud bych chtěl například z třídy image používat metody třídy file. OK, bavil jsem se o tom s kamarádem, ten říkal, že si mám pro každou třídu vytvořit vlastní instanci používající třídy, což mi nepřijde příliš estetické řešení, když už mám instanci v hlavní třídě, proč bych jí měl načítat znova do vnořené třídy? class hlavni { ... $database = new database(); $file = new file(); $image = new image(); ... } class database { ... } class file { ... function delete($path) {...} ... } class image { ... ($parent)->file->delete("soubor.jpg"); ... } ------- ($parent) - tohle by měl bejt nějakej odkaz na rodiče instance této třídy... Dělal jsem ve Flashi, tam tohle bylo normální, v php mi to chybí. Jestli někdo pochopíte můj problém a poradíte, budu vděčný ;) Mějte se |
||
YoSarin Profil |
#2 · Zasláno: 10. 7. 2007, 15:21:51
parent::$file->delete();
|
||
enoice Profil |
#3 · Zasláno: 10. 7. 2007, 15:26:21
ještě mě napadlo, že bych mohl do konstruktoru každé vnořené třídy dát třeba proměnnou $root, do které by se z hlavní třídy napsalo $this
------------------------------------------------ class database { function database($root) { $root->file->delete("soubor.jpg"); } } class hlavni { ... $file = new file(); $database = new database($this); } ---------------------------------------------- ale nepřijde mi to jako nejkrásnější řešení... takže stáhle hledám další návrhy |
||
enoice Profil |
#4 · Zasláno: 10. 7. 2007, 15:34:27
YoSarin: si odpověděl dřív než jsem to odeslal... díky, ale myslím odpovídáš na trochu něco jiného než mám na mysli... Kdybych používal extends tak to asi bude fungovat, ale já bych raději přes instance.
Zkus tohle... ---------------------------------------------------- <?php class class2 { function class2() { $this->pozdrav = "cau"; } } class class3 { function class3() { $this->pozdrav = "ahoj"; echo(parent::$class2->pozdrav); } } class class1 { function class1 () { $class2 = new class2(); $class3 = new class3(); } } $class1 = new class1(); ?> -------------------------------------- |
||
Mastodont Profil |
#5 · Zasláno: 10. 7. 2007, 15:58:10
ilozofie byla taková, že by byla hlavní třída, která by obsahovala objekty, které by byly instancemi dalších tříd (database, image, file,...)
To je dost netradiční, obvykle se používá factory nebo registry, zkus si najít příklady na tyto návrhové vzory. |
||
enoice Profil |
#6 · Zasláno: 10. 7. 2007, 16:27:33
o tom jsem ještě neslyšel :)
|
||
K. Profil * |
#7 · Zasláno: 10. 7. 2007, 16:51:15
|
||
MzM Profil |
#8 · Zasláno: 11. 7. 2007, 11:19:50
no, moc tomu dotazu nerozumím (ale čemu já tady rozumím...), ale pokud máš ve třídě hlavni (nahoře) hotový objekt $file, tak se dá jednoduše zavolat jeho metoda $file->delete('cosi.jpg'); (aha, to není ten správný případ) , takže asi dál...
Pak, přesto, že nemáš instanci třídy můžeš použít statické metody, každé třídy. Tedy pokud je metoda delete() třídy file napsaná jako statická (nepoužívá proměnné třídy, jinak v php4 jsou všechny metody statické), tak můžeš použít file::delete('cosi.jpg'); aniž vytváříš instanci třídy file. toto je to, co chceš? |
||
enoice Profil |
#9 · Zasláno: 11. 7. 2007, 11:32:34
no, statické metody by mi asi nevyhovovaly...
znáte Texy!? (http://texy.info) díval jsem se jak tenhle problém řeší -dgx- (podle mně zkušený php programátor) a ten ke každé vložené třídě dává parametr $this... čili způsob jaký jsem napsal dříve... čili tento... ------------------------------------------------ takže to vidim asi na tenhle způsob |
||
Časová prodleva: 8 dní
|
|||
zero0x Profil |
#10 · Zasláno: 19. 7. 2007, 13:49:10
ten isty problem som mal
hlavna trieda, a ta ma ako vlastnosti instancie ostatnych tried (btw to som vymyslel sam) class Core { mna teraz trapi skor taka vec, ze potrebujem natahovat tieto triedy viac dynamicky teda podla potreby natiahnut nove a nove, a nechcem mat definovane tie premenne pre vsetky subtriedy. Teda aj pre tie, ktore mozno nenatiahnem.. ale to je uz na novy topic |
||
enoice Profil |
#11 · Zasláno: 19. 7. 2007, 13:54:05
ano... vyřešil jsi to stejným způsobem ;)
ten dalsi problem, nevim jak to myslis :) |
||
Časová prodleva: 17 let
|
0