Moze li neko, neku malu aplikaciju (sa login,logout,session... ) da stavi (uploaduje za downoad) da malo "pokupim" zanat :D
Ja radim sledecim redom:
1. napravim dizajn (html+css)
2. stavim neke Smarty varijable u header (npr. pagetitle, users online etc.) i footer
3. isecem header,middle,footer
4. Napravim klase za sessiju, mysql.. itd. i smestim u /includes
Pa middle dalje radim i kopiram za svaku stranu...
Na pocetku svake strane, kreiram objekte od klasa include pa new... jelte.
Varijable pisem u stilu neka_varijabla, a klase "Klasa", a fukncije TamoNekaFunkcija().....
dakle?
Da se ubacim i ja:
radim iskljucivo OOP, koristim Doctrine, Smarty i moj kontroler. Moj savet je da klase ne koristis kao skup funkcija; objekat je tu nesto da uradi, a ne samo da drzi funkcije u sebi. Mozda ti ovo zvuci malo konfuzno, ali kad pocnes da koristis ORM, bice ti jasnije.
Skoro nijedna moja dinamicka funkcija ne zahteva parametre, sto i tebi preporucujem. Ako funkciji treba parametar, ona bi morala sama da se snadje.
Static metode koristi da dovuces instancu te klase; npr. Worker::getLogged() koristim da bih dovukao instancu logovanog radnika. Uzmi sledeci primer;
$id = $_GET['id']
$article = Article::getById($id) ; // npr. korisnik je kliknuo na link ?index.php&action=delete&id=15 . Ovo je samo primer
$article->delete() ;
I ovo ce da radi. Ali korisnik jako lako moze da izmeni URL i da umesto 15, stavi 21 sto na primer ne bi smeo da uradi; zato ti odlucujes da napravis dodatnu zastitu. Metodu Article::delete(), prepravis na ovo:
Class Article
{
public function delete()
{
if ( ! Worker::getLogged()->canDeleteArticle() )
throw new Exception('Hack detected') ;
// ovde ide stari kod za brisanje
}
}
(naravno, u klasi worker moras da napises i metodu canDeleteArticle)
Nadam se da si razumeo zasto je bitno da metode nemaju ulazni parametar. Article::delete() ce sam da se pobrine oko provere brisanja sto znaci da je mozes pozvati odakle god hoces, iz bilo kog modula ili instance neke druge klase.
Metode MORAJU biti kratke; vremenom ces shvatiti zasto, ali zasad mi veruj na rec. Ako metoda ima vise od 10 linija, znaci da nesto ne valja. Kod mene je prosek 4-5 linija, gornji primer je u stvari:
Class Article extends BaseArticle
{
public function delete()
{
if ( ! Worker::getLogged()->canDeleteArticle() )
throw new Exception('Hack detected') ;
parent::delete() ;
}
}
jer koristim nasledjivanje klasa u Doctrine-u.
Zasto je jos bitno da metode nemaju ulazni parametar:
Uzmimo opet primer Article::delete(); ako bi toj metodi dodao neki ulazni parametar (kazem, samo primer), onda bi svuda gde se ta metoda poziva morao da dodam slanje parametra. Neki drugi programer koji bi nastavio takav program bi sasvim sigurno ispizdeo u lutanju kodom. Naravno, uvek mozes da ostavis haos i da onda kupac tvog programa jednostavno mora tebe da pozove, ali mislim da tako nesto raditi uopste nije lepo. Veruj, ima ljudi koji hoce da plate vise ali da takav kod ne zavisi od toga hoce li programer biti dostupan i kasnije.
I jos nesto; ako planiras da budes dobar programer, batali dizajn. Kad god sam morao da radim i programiranje i dizajn, nista od ta dva nije valjalo. Pre 4 meseca sam presekao i rekao da tako vise ne moze; sad pisem veoma komplekse programe za 5 puta krace vreme, pri cemu je kod neverovatno kratak, brz, lako citljiv i prosiriv.