Napravio sam class mysql koja je zduzena za db. Cesto nasledjujem iz nje.
Pa sam napravio tri klase user, mod, admin koje imaju dosta ponavljanja...
Juce sam saznao da PHP ima Object interface i abstract class. U cilju ucenja i (valjda) boljeg nacina programiranja odlucih da napravim jednu abstract class uma koja bi imala sve zajednicke metode od user/mod/admin klasa i onda je samo nasledjujem.
class user extends uma; class admin extends uma;
Sve bi bilo ok da mi ne treba mysql. Ranije sam to radio jednostavnim nasledjivanjem mysql, ali sada to ne moze.
class user extends uma extends mysql :D
Prvo mi je na pamet palo na unutar npr. user klase stavim
public $db;
__construct(){$db=new mysql();}
I dalje koristim $this->db... Ali to mi ne deluje ok. Uz to ide i pitanje kako onda pozivam mysql->insert()?
$this->db->insert() ili je neka gruga sintaksa?
Onda sam pomislio da je mozda moguce praviti neke nizove klasa tipa
class uma extends mysql{}
class user extends uma{}
S tim sto onda uma valjda ne bi mogla da bude apstraktna? Da li je moguce uraditi ovo:
abctract class uma extends mysql{}
Znam da apstraktne ne mogu da se instanciraju...
U medjuvremenu sam nasao i ovo: http://wiki.php.net/rfc/horizontalreuse
Da li je neko koristio trait ili probao da graftuje klase.
U mom slucaju mislim da bi mi samo graft pomogao ali mi se ne mili da u svaku klasu moram da ubacujem
use{pa onda SVE iz mysql klase from novo_f_ime;}
Citao sam i es thread o mvc podeli, pa mogucnosti da se pravi vise klasa za istu logicku celinu. Nije to lose ali za sada bih izbegao te stvari.
Nesto mi se ne mili da imam class userDisplay, userDB, userOvoiono...
Nekako su mi lepse celine. Sve za usera u klasu user, sve za admina u admin class. A 'logicka' mvc podela mi je:
$user=new user;
$user->display();
$user->insert();
$user->njnjnj();
Jos pogotovo sto bi display i insert bili skoro identicni za sve tri klase user mod admin. Samo nemam zelju da ih pravim odvojeno nego da ih nasledim ko covek.
Gresim li? Koja su vasa iskustva na datu temu? Sta je najbolje raditi?