Kurs: PHP programiranje Materijali vezani uz ovu lekciju: - Test klase i objekti - Klase i objekti (PDF dokument) Definisanje klaseKlasa u PHP-u se definiše upotrebom naredbe class.
Unutar tela klase, sva podešavanja osobina i definicije metoda su uokvirene velikim zagradama. PHP podržava nasleđivanje klasa, pa je moguće novu klasu kreirati kao naslednika neke već postojeće pomoću ključne reči extends:
Objekti klase novaKlasa će imati pristup svim osobinama i metodima klase staraKlasa, dok obrnuto ne važi.
Deklaracija osobina U telu klase prvo se navode sve osobine. Na primer:
PHP ne zahteva da deklarišete promenljive. U prethodnim primerima koda nismo deklarisali promenljive, već smo ih odmah koristili. To je moguće uraditi i sa promenljivima unutar klase. Međutim, mnogo je bolje deklarisati promenljive koje se odnose na osobine klase. Time je kod mnogo razumljiviji i deklarisanje osobina se smatra dobrom programerskom praksom. Osobinama je moguće postaviti inicijalne, podrazumevane vrednosti. Međutim, tu postoje određena ograničenja. Dozvoljeno je dodeljivanje prostih vrednosti osobinama, ali ne i izraza. Na primer, sledeće deklaracije su dopustive:
Sledeće deklaracije nisu dopustive:
Nizove je dozvoljeno koristiti u deklaracijama osobinama, sve dok su vrednosti elemenata proste. Na primer:
Postavljanje i promena vrednosti osobina nekog objekta klase se vrši ili pomoću konstruktora, ili pomoću metoda specijalno namenjenih u te svrhe, o čemu će biti reči kasnije. Unutar klase postoji promenljiva $this koja se odnosi na samu klasu. Ova promenljiva ne može biti korišćena izvan klase. Dizajnirana je da se koristi u naredbama unutar klase kako bi omogućila pristup promenljivima same klase. Obično se koristi u formatu $this->varname. Na primer:
Obratite pažnju da se znak $ koristi ispred promenljvie this, ali ne i ispred promenljive gorivo.
Dodavanje metoda Metodi određuju ponašanje nekog objekta. Definišu se unutar klase kao funkcije. Za klasu Auto mogli bismo da definišemo metod za sipanje goriva. Prethodno definisana osobina $gorivo predstavlja trenutni sadržaj goriva u automobilu. Metod za sipanje goriva bi trebalo da poveća ovaj sadržaj za određenu vrednost.
Sem metoda kojim definišete ponašanje neke klase, PHP obezbežuje i neke specijalne metode za rad sa klasama. Njihova imena počinju sa __ (dve donje crte). Jedan od njih je tzv. konstruktor. On se poziva prilikom kreiranja objekta neke klase. On nije neophodan i ukoliko ne želite da podešavate osobine objekta prilikom kreiranja, ne morate da ga koristite. Dozvoljeno je postojanje samo jednog konstruktora unutar klase. Njegovo ime mora da bude __construct(), kako bi PHP znao koji metod da izvršava prilikom kreiranja objekta. Na primer:
Ovaj konstruktor definiše novi auto, sa punim rezervoarom goriva i otvorenim vratima. U prethodnim verzijama PHP-a, konstruktor je imao isto ime kao i klasa. PHP 5 prvo traži konstruktor nazvan __construct(), a ako ga ne nađe traži metod koji ima isto ime kao klasa, kako bi i stare klase mogle da se izvršavaju. Sledeći primer predstavlja klasu koja kreira jednostavnu HTML formu sa tri metoda.
Osobine i metode klase mogu biti javne ili privatne. Javne osobine i metodi su dostupne izvan same klase. Ukoliko su osobine i metodi definisani kao u gore navedenim primerima, oni će biti javni. Međutim, nije dobra praksa dozvoljavati promenu osobina objekta direktno iz skripta. Osobine nekog objekta, tj. klase bi trebalo da budu sakrivene od ostatka koda, a pristup da im bude omogućen preko odgovarajućih metoda klase. Zbog toga bi osobine trebalo deklarisati kao privatne, pomoču ključne reči private. Na primer:
Ukoliko je klasa Auto definisana kao u navedenom primeru, jedini način da se promeni količina goriva nekog objekta klase jeste preko metoda kupiGorivo(). To je jedini javni metod. On ima pristup metodu sipajGorivo() koji povećava vrednost promenljive $gorivo, jer se ova dva metoda nalaze unutar iste klase. Metodu sipajGorivo() nije moguće pristupiti izvan klase.
Korišćenje klaseKod koji definiše klasu mora da bude dostupan kodu koji tu klasu koristi. Često se klase definišu u posebnim fajlovima koji se zatim uključe u kod koji ih koristi.
Na primer:
Prilikom kreiranja objekat se smešta u navedenu promenljivu i poziva se konstruktor klase. Nakon toga, kada je objekat kreiran, moguće je pozivati različite metode klase ili mu menjati osobine:
Sledeći primer koda demonstrira korišćenje prethodno definisane klase Form.
U prvoj naredbi u kod se uključuje fajl u kome se nalazi definicija klase Form. Zatim se nakon ispisivanja sekcije <head> na HTML stranu, kreira novi objekat klase Form nazvan $phone_form. Dodaju se tri polja na formu, a zatim se forma prikazuje.
Kopiranje i uništavanje objekataPHP obezbeđuje metod koji možete da koristite za kopiranje objekata. Ovaj metod se naziva __clone(). Unutar klase možete da napišete svoj metod __clone() ukoliko želite da precizirate šta se dešava prilikom kopiranja. Ako ga izostavite, PHP će koristiti podrazumevani metod __clone() koji kopira osobine kakve jesu. Jednom kreiran objekat možete da uništite pomoću naredbe unset:
Nakon izvršenja ove naredbe, objekat više ne postoji. Prilikom uništavanja objekta, PHP izvršava metod __destruct(). Ovaj metod možete da redefinišete unutar klase, kako biste izvršili još neke potrebne naredbe. Na primer, možete da prikažete poruku da je objekat uništen, da zapamtite broj uništenih objekata ili da upišete neki podataka u bazu.
Statički elementiPonekad klase poseduju i elemente koje možemo “pozvati” i bez instanciranja same klase. Ovakvi elementi nazivaju se statički elementi i mogu biti istog tipa kao i svi ostali elementi jedne klase (metode i atributi). Definicija ovakvih elemenata vrši se ključnom rečju static.
Prilikom pozivanja statičkih elemenata, instanca klase nije neophodna, već se elementi pozivaju direknim unosom klase koja ih sadrži. Pri čemu umesto znaka -> koristimo znak :: (scope resolution operator). Na primer
poziva metodu f() klase mojaKlasa.
prikazuje atribut $x klase mojaKlasa.
|