Brzina - pouzdanost - kvalitet

Osnove objektno orijentisanog programiranja u PHP-u sa primerima



English

Nivo: Osnovni

Ključne reči: objekti, klase, funkcija construct, atributi, nasleđivanje klasa (extends)

Veoma često pojam koji se danas javlja kod programiranja jeste Objektno orijentisano programiranje (OOP) gde za razliku od proceduralnog programiranja struktura web strane je drugačija ali je izlazni rezultat isti – web strana ili web aplikacija koja se renderuje u Browseru. Objektno orijentisano programiranje je način programiranja koji omogućava grupisanje varijable i funkcije u klase.

Ovaj kratak tutorijal opisaće osnove OOP-a i to na primeru jednog jednostavnog web sajta od par strana i Kalkulatora gde je cilj da se vidi jednostavnost strukture web strane koja se prikazuje preko objekata.

OBJEKAT JE „KUĆA“ A KLASA JE „PROJEKAT KUĆE“

 

Jednostavnije rečeno, KLASE možemo posmatrati kao projekat kuće (osnova sprata sa prostorijama) dok je OBJEKAT kuća izgrađena na osnovu tog projekta, odnosno klase. Sa druge strane, na osnovu tog istog PROJEKTA KUĆE (odnosno klase) može se izgraditi neka druga KUĆA (odnosno objekat 2) itd.
Takođe, možemo postojeći PROJEKAT KUĆE (klasu) modifikovati tako što ćemo dodati još neke „prostorije“ i na osnovu toga izgraditi neku treću KUĆU (odnosno objekat 3) itd. Jednostavan primer web sajta preko OBJEKTA upravo to i pokazuje – u jednoj KLASI ćemo „PROJEKTOVATI“ kompletan sajt (varijable, template web strane) i na osnovu toga „gradimoOBJEKAT.

Preporučuje da se OOP uči kada se dobro savlada proceduralno programiranje u PHP–u gde se jednostavno piše sintaksa koda, red po red, koje potom server procesuira. Naravno, pre toga se smatra da imate dovoljno znanja iz osnove web programiranja odnosno rada u HTML-u i CSS-u. Naredne vežbe će podrazumevati da imate prethodno navedena znanja i samim tim odmah ćemo se bazirati na prikaz osnove rada u OOP-u.

osnove-objektno-orijentisanog-programiranja

 

VEŽBA 1 - JEDNOSTAVAN WEB SAJT PREKO KLASA I OBJEKATA

Objekat – predstavlja entitet koji jer jasno definisan – poput objekata u prirodi – sto, stolica, kuća, auto itd. Pa tako i u programiranju taj objekat biće jednostavno – web strana (to je ona KUĆA sa početka teksta).

Klasa - sa druge stane, klasa predstavlja mesto gde daje opis objekata po pitanju određenih funkcija (to je PROJEKAT KUĆE sa početka teksta). Drugim rečima, u klasi se definišu određene operacije (funkcije, varijable itd) koje se zatim pozivaju preko objekata i kao rezultat se daje ispis podataka.

Kako to konkretno funkcioniše ...

Kako to konkretno funkcioniše daćemo na primeru jednostavnog web sajta, podrazumevajući, da imate neko predznanje iz web programiranja kao što je rad u HTML-u, CSS i osnove rada u PHP-u. Svaki sajt ima neke delove u svojoj konstrukciji koji se ponavljaju na svakoj strani na primer – osnovna konstrukcija div tag-ova, header (gde je logo), footer. Ti delovi mogu se jednostavno definisati kao šablon (template) u kome će se menjati sadržaj – odnosno tekstovi.

Za početak kreiraćemo stranicu koju ćemo snimiti pod nazivom "html-template.php" . Ta strana predstavlja HTML kod gde je konstrukcija web strane sa svim potrebnim stilovima čiji se linkovi nalaze u Head sekciji i sve se nalazi unutar varijable $strana . CSS fajl koji stilizuje konstrukciju web strane nalazi se u folderu css. Konstrukciju web strane može stilizovati po želji. Ovde je jedna jednostavna web konstrukcija sastavljena od DIV tag-ova i nije cilj da se previše baziramo na HTML i CSS tako da je svedeno na minimum. Akcenat je na implemenataciji klasa i formiranje objekata.

Kao što se vidi komplet statična konstrukcija web stane (template) se "skladišti" u jednoj varijabli $strana=' ';

Međutim, u delovima Template-a nalaze se određene varijable koje skladište podatke – odnosno deo stranice koji nije template i koji se menjaju prema vrsti stranice. U ovom primeri to su tri varijable:
.$title.
.$navigacija.
.$tekstovi.
.$footer.

Naravno, sadržaj tih varijabli ćemo u nastavku definisati. Snimite fajl, ubacite u folder "Objekto-orijentisano-programiranje-primer" a potom taj folder prebacite u WAMP da bi kasnije mogli preko Local Hosta mogli da testiramo render web strane preko Browser-a.

objektno-programiranje

Definisaćemo tri stranice (tri fajla) gde će svaka imati varijable koje imaju određeni sadržaj odnosno kreirati stranice ...

navigacija.php

Komplet HTML kod koji daje strukturu navigacije je u stvari uskladišteno sve unutar varijable $navigacija . Linkovi u navigaciji generišu link koji predstavlja uslov "ako je Web strana = nečemu".

objektno-programiranje

tekstovi.php

Sadržaj svake strane (tekst, slike) je uskladišten u varijabli koja nosi naziv same strane $Usluge, $Proizvodi itd.

objektno-programiranje

footer.php

Komplet HTML kod koji daje sadržaj footer-a uskladišten je unutar varijable $footer

objektno-programiranje

Definisaćemo fajl naziva klase.php gde upisujemo klase kao ključni elemente OOP-a. Klasa se nalazi unutar PHP bloka, ima svoj naziv (web_sajt) i počinje i završava se vitičastom zagradom . Unutar vitičastih zagrada ide funkcija naziva varijable_web_sajta gde se nalazi NIZ VARIJABLI koje smo prethodno definisali u KORAKU 2. Takođe, tu se nalazi sintaksa koja uključuje (include) Template stranicu i naravno preko komande Echo daje se ispis varijable $strana koja je u stvari komplet HTML konstrukcija web strane

objektno-programiranje

Na kraju ostaje da sve svi elementi generišu u jednu stanicu (index.php) u kojoj će se sve skripte obraditi i kao izlaz dati render web strane u Browseru. Komplet strana je unutar PHP bloka. Kod počinje uključivanjem (include) ranije navedenih fajlova – klasa, navigacija. U nastavku koda ide definisanje da je ključ filtriranja stranica $ title_clear" odnosno tu se skladišti sve ono što se dobije (GET) iza termina web_strana . U nastavku, IF uslov koji poredi da li je link generisan odnosno da se iza reči web_strana nešto nalazi od uslova. Ako se ne nalazi odnosno if ($title_clear ==NULL) ispisuje se tekst u nastavku odnosno tekst koji ide na početnu stranu. Ukoliko nije, ispisuje se tekst ali ne bilo koji, nego onaj tekst koji se nalazi u varijabli koja je jednaka TITLE . Kraj koda predstavlja kreiranje OBJEKTA koji poziva KLASU odnosno poziva se funkcija varijable_web_sajta .

objektno-programiranje

Na kraju sajt izgleda ovako. Dizajn je veoma jednostavan i cilj nije bio da se previše vežba bazira na dizajniranju nego da se na veoma jednostavnom primeru prikaže kako sajt može da se programira i preko objekata i klasa. Ovakav način web programiranja možete veoma lako implementirani u Vaša buduća rešenja.

objektno-programiranje

 

VEŽBA 2 - FUNKCIJA CONSTRUCT, ATRIBUTI, METODE, EXTENDS (NASLEĐIVANJE)– PRIMER KALKULATORA PREKO KLASA

Nastavak pokazuje još neke pojmove koji se javljaju kod OOP-a, odnosno Atribute i Metode, ali na konkretnom primeru jednostavnog KALKULATORA. Atributi se smeštaju u klase i predstavlju tzv. "elemente" PROJEKTA KUĆE sa početka vežbe – na primer prostorije dnevna soba, kuhinja itd. U ovom slučaju to su polja za unos brojeva koja čine KALKULATOR.

Zadatak je da se isprogramira kalkulator koji će unosom dva polja davati rezultat površina trougla i površina trapeza. To znači da je potrbno definisati dve klase gde će svaka klasa imatu svoju matematiku za izračunavanje površine sa istim podacima.

Početak koda počinje definisanjem naziva klase (povrsina_trougla) gde se smeštaju atributi (elementi "projekta") i metode
- funkcija koja "konstruiše" ta polja - CONSTRUCT
- funkcija koja skuplja atribute i obrađuje ih u matematiku
- funkcija koja daje ispis rezultata

Nastavak koda daje novu klasu class povrsina_paralelograma extends povrsina_trougla što znači da se tu sadrži nova matematika ali koja i dalje ima podatke od ranije, drugim rečima, to je klasa koja NASLEĐUJE neke elemente prethodne klase a to su polje_1 i polje_2. Novo stvorena klasa isto preko metoda KONSTRUIŠE ko učestvuje u kalkulaciji, definiše se nova funkcija „kalkulacija2“ sa novom matematikom koja množi brojeve iz dva polja (a x h je površina paralelograma).

objektno-programiranje

Na kraju ostaje da se fajlu index.php ubaci formular sa poljima i naravno kreira NOVI OBJEKAT koji poziva sasvim drugu klasu iz fajla klase.php . Početak koda definiše jednostavan formular sa 2 polja i dugmetom SUBMIT. Važno je napomenuti da polja imaju nazive kao i klasa (polje_1, polje_2) U nastavku poziva se funkcija koja po učitavanju stranice poziva "povrsina_trougla" i dalje se definiše IF USLOV koji "kaže" Posle klika na SUBMIT formular preko komande GET (DOBIJA) link gde se porede dobijena polja (GET).. Ako je uslov TAČAN (kliknut je SUBMIT naziva REZULTAT i ako je GET (dobijen) sadžaj polja (polje_1, polje_2) KREIRA SE OBJEKAT ($rezultat) u kome se smešta KLASA sa svojim elementima posle čega se ispisuje rezultat u formi kako je dato u samoj klasi "povrsina_trougla" . Po istom principu se daje i rezultat 2 koji prikuplja sadržaj polja (polje_1, polje_2) i sve se smešta u $rezultat2 gde se definiše novi objekat "povrsina_paralelograma". Na kraju idu dva reda sa ECHO komandama koja rade ispis dve varijable odnosno dva rezultata koji pozivaju svaki svoju matematiku definisanu u svojim klasama.

objektno-programiranje

Jednostavna 2 polja formulara gde se unosom brojeva i klikom na dugme "rezultat" ispod kalkulatora prikazuje rezultat prema različitim matematikama koje se nalaze u klasama. Ovo je jednostavan primer koji se dalje može razraditi po pitanju same kalkulacije (na primer proračuna rate za kredit, površina i mnogo toga gde i klasi polja_formulara definišete matematiku).

Na kraju vežba 2 izgleda ovako.

objektno-programiranje

 

PREUZMITE IZVORNI KOD

 

ZAKLJUČAK

Važno je savladati suštinu razmišljanja kod OOP-a gde malo se postavljaju drugačije elementi koji čine neki sajt. Kod klasičnog web programiranja ide se logikom da se piše red po red kojom se definiše konstrukcija web strane, sadržaj, linkovi itd. Preko OOP-a vi vašu web konstrukciju delite na nekoliko fajlova koji su Statični (TEMPLATE) i DINAMIČKI (varijable) dok preko KLASA definišete "KAKO DA SE PONAŠAJU" kada se komplet sve include-uje u index.php odnosno u OBJEKAT. U KLASE smeštate podatke koji učestvuju u obradi kao i funkciju koje te podatke obrađuju. Implementacijom kreirate OBJEKAT koji poziva klasu o kao rezultat daje se ispis podataka.