Autor Zpráva
Loopeň
Profil *
Zdravím, potřebuju pomoct s úvodem do frameworku. Mám různé funkce a třídy, které často používám při programování. Chtěl jsem tyto funkce a třídy zapouzdřit do nějakého miniframeworku, ale vůbec nevím jak na to - jak začít. Na jakém principu to má fungovat.

To nejdůležitější pro mě je aby mohla "první" třída využívat metody "druhé" třídy nebo celou instanci "druhé" třídy a to i v případě, že v "druhé" třídě je potřeba využívat první třídu. Je to vůbec možné? Jde mi o to, že mám třeba nějakou metodu v jedné třídě a tu samou metodu potřebuji i v další třídě - přece nebudu mít dvě stejné metody ve dvou třídách?

Rád bych taky ke všem třídám a metodám přistupoval přes nějakou centrální třídu, která by ty jednotlivé podtřídy (jako např. nepovinné moduly) "spravovala" (načítala, atp.).

Jak mám začít? Zanalyzovat nějaký existující framework nedokážu - jsou na mě moc rozsáhlé a složité :-(
srigi
Profil
V PHP je rozumnym riesenim pouzivat MVC framework.
Jan Tvrdík
Profil
Loopeň:
Nebo lze použít nějaký hotový framework – např. Nette.

To nejdůležitější pro mě je aby mohla "první" třída využívat metody "druhé" třídy nebo celou instanci "druhé" třídy a to i v případě, že v "druhé" třídě je potřeba využívat první třídu.
Neznám konkrétní situaci, ale stejně bych ti doporučil zamyslet se nad logikou návrhu.
Mastodont
Profil
Když hotový framework, tak CakePHP, Symfony, Zend.
jakubroz
Profil
Mastodont
právě se učim cake, mohl bys poradit nějaký tutorial nebo neoficiální dokumentaci? ta ofiko mi přijde nic moc.
Mastodont
Profil
jakubroz
Zkus sehnat třeba http://www.apress.com/book/view/1430209771 nebo
http://snook.ca/archives/snooks_book_nook/review-cakephp-app-development/
jakubroz
Profil
Mastodont
diky, to vypadá dobře.

Něco ve formě dokumetace neni?
Mastodont
Profil
Nevím o tom, ale já v Cake nedělám, tak to moc nesleduji.
Loopeň
Profil *
Ty hotové frameworky mi moc nevyhovují. Hotové frameworky nemají specializované funkce, které potřebuju. A navíc bych chtěl alespoň částečně porozumět tomu principu / postupu. Ne to jen vyřešit. Díky srigimu za odkaz, prostuduju. A pro pana Tvrdíka příklad:
Mám třídu "email" a třídu "upravit" a chci z aplikace poslat upravený e-mail. Rád bych volal něco jako
$framework->mail->send_welcome('UTF', 80);
a tím by se zavolala třída "email", která by ale pro úpravu mailu použila (bez mého zásahu) třídu "upravit". Stejně tak bych ale chtěl třídu "upravit" a její metody využívat třeba sám:
$framework->upravit->get_utf('text');

Prostě jednoduše zapouzdřit třídy do jedné centrální a aby se ty podtřídy mohli navzájem používat.
Jan Tvrdík
Profil
Loopeň:
Význam třídy upravit mi připadá nejasný, ale to co potřebuješ se řeší tzv. skládáním tříd. Tzn., že třída Email bude mít členskou proměnnou, který bude obsahovat instanci třídy Upravit.
Mastodont
Profil
$framework->upravit->get_utf('text');

Je dobré se rozhodnout, jestli názvy budou anglicky nebo česky. Tohle vypadá děsně.
Loopeň
Profil *
Jan Tvrdík A je možný to co jsem říkal? Aby třeba ve třídě A se používala metoda co je ve třídě B a naopak? Tj. aby byly oboustranně provázaný.
Mastodont Já vím - jen příklad :-) Nic podobnýho bych v kódu nenechal.
lucas
Profil *
Loopeň
Ak pracujes sam, tak Ti nic nebrani si urobit svoj vlastny framework, ktoremu budes 100% rozumiet.
Ak pracujes (alebo budes pracovat) v time, tak je asi lepsie pochopit uz niektory existujuci framework.

Toto, co vyzadujes: aby metoda z A sa mohla pouzivat v metode B, je viac rieseni, jedno z nich je napr. __autoload
Loopeň
Profil *
ad) __autoload() toto znám, ale v tomto případě nevím jak by to mělo fungovat. V třídě A chci použít metodu ze třídy B a tak načtu třídu B, ale z té třídy B se zase potřebuje použít metoda z třídy A. Tím imho vznikne nekonečnej cyklus nebo tak něco :-)
Joker
Profil
Loopeň
V třídě A chci použít metodu ze třídy B a tak načtu třídu B, ale z té třídy B se zase potřebuje použít metoda z třídy A. Tím imho vznikne nekonečnej cyklus nebo tak něco :-)
Nevznikne, leda v případě, že by se volaly navzájem tytéž metody :-)

Pro samotnou deklaraci třídy není podle mě podstatné, jaké další třídy jsou použité uvnitř metod té třídy. I kdyby nějaká metoda konstruovala neexistující třídu, problém nastane až při volání té konkrétní metody... a pokud by se ta metoda nikdy nezavolala, projde to podle mě bez chyby.
Mastodont
Profil
Aby třeba ve třídě A se používala metoda co je ve třídě B a naopak?
Můžeš ty objekty provázat tak, aby o sobě věděly a volaly navzájem metody druhého objektu, ale vždy to bude metoda příslušného objektu - prohazovat si je nemohou.
Loopeň
Profil *
OK - díky všem. Zkusím pár pokusů a kdybych narazil, tak ještě napíšu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: