Transcript
  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    1/34

    SKRIPTA IZ PREDMETA INTERNET TEHNOLOGIJE

    Objektno orijentisanoprograiranje ! PHP

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    2/34

    SADR"AJ

    1 UVOD.............................................................................................................................3

    2 OOP u PHP....................................................................................................................4

    2.1 Objekti...................................................................................................................... 42.2 Klase........................................................................................................................4

    2.3 Atributi i modifikatori.................................................................................................6

    2.4 Metode i arametri.................................................................................................11

    2.! "tati#ke metode......................................................................................................11

    2.6 Ko$kstruktori..........................................................................................................12

    2.% Ko$sta$te...............................................................................................................13

    2.& 'asle(i)a$je..........................................................................................................14

    2.* Prikri)a$je metoda.................................................................................................1&

    2.1+ Abstrakt$e klase.................................................................................................2+

    2.11 ,$terfejs...............................................................................................................21

    2.12 t-is are$t i self.................................................................................................22

    2.13 /uko)a$je i0u0eima..........................................................................................23

    2.14 Koris$e fu$kije..................................................................................................24

    3 Primeri i0 rakse...........................................................................................................26

    3.1 Arraist................................................................................................................. 26

    3.2 /uko)a$je tekstal$im fajlama.................................................................................2%

    3.3 /uko)a$je slikama.................................................................................................2*3.4 /uko)a$je ba0om odataka...................................................................................31

    2

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    3/34

    UVOD

    Objekt$o orje$tisa$ $a#i$ rormira$ja ima $e5to drua#iju loiku od roedural$or)obit$o $a#i$a u -u. U objekt$om ristuu m$oi slo7e$i i komliko)a$i 0adai se0$at$o lak5e re5a)aju $eo u sta$dar$om obliku i $e samo to mo7da jo5 5to je i )a7$ijem$oo se lak5e odr7a)aju i me$jaju.

    ,deja u)o(e$ja objekata i klasa 0$at$o ojed$osta)ljuje loiku koda tako(e je i #itlji)iji 0aroramere i m$oo se lak5e odr7a)a. 8la)$e st)ari oko koji- se OOP 9objekt$o orje$tisa$ororamira$je: )rti su objekti i klase. O$e su usko o)e0a$e i samim tim m$oi roramerikoji se r)i ut susre;u sa o)ak)im $a#i$om rada i- #esto me5aju.

    ?. Odo)or bi bio DA. 'ako$ toa bi usledilo ita$je =A #emu o$da slu7i

    objekt$o orije$tisa$o roramira$je>? Odo)or $a o)o ita$je je $e5to o5ir$iji. Ukoliko seradi o jed$osta)$ijim ili ma$jim alikaijama i roramima asolut$o $ema $ikak)e )e0e kojiri$i koristite. Medjutim roblemi $astaju kas$ije kada taj kod treba odr7a)ati i me$jati $a0a-te) klije$ata. Dobro struktuira$ roram $aisa$ koriste;i OO ko$et se 0$at$o lak5eodr7a)a i me$ja. Ukoliko se rime$juju ra)ila dobro kodira$ja i soft)erski ater$i s)akamodifikaija mo7e da se uradi relati)$o jed$osta)$o i lako ma koliko o$a 0a-te)$a i )elikabila. "a drue stra$e u roedural$om roramira$ju st)ari $e idu ba5 tako lako.Proramer s)e mo7e $ara)iti roedural$o ali je ita$je mo7e li kas$ije taj kod odr7a)ati.'isu retki rimeri kada klije$t tra7i $e0$at$e rome$e u kodu 9mi$imal$a rome$afu$kio$al$osti ili #ak rome$a di0aj$a: a da je $ji- $emou;e uraditi i s)e treba isati i0o#etka. @amislite rojekat $a kojem raditite ar mesei i $eosred$o re isoruke klije$t)am ka7e =e i0me$i mi samo o)aj deo umesto o)o $eka radi o)ako? 0$a#i 0a-te)a od )as

    mi$imal$e rome$e u kodu a sob0irom da ste radili roedural$o i $iste o5to)ali ra)ilaroramira$ja dola0i do )eliko roblema i )rlo )ero)at$o je da ;ete morati da i5ete eokod o$o)o. 'ara)$o iskus$i rorameri $e moraju da rade s)e iso#ekta ako je roramleo struktuira$ ali s)akako ;e imati m$oo )i5e osla i komlikaija $eo da su koristili OO$a#i$ rada. Me(utim to $e 0$a#i da je i u OOPu s)e ideal$o i tu ako se $e o5tuju ra)ila)rlo je mou;e da se kod i5e iso#etka $a 0-te) klije$ta $a mi$imal$u rome$u.

    Bo je la)$a i mo7da $aj)e;a reds$ost OOPa u od$osu $a roedural$o. ak5eodr7a)a$je reled$iji kod i loi#$ije o)e0i)a$je e$titetaC

    3

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    4/34

    OOP u PHP

    1.1 Objekti

    Objekat mo7e da bude s)e. ")e 5to se i5e u roedural$om re7imu mo7e da se remesti uobjekat. ilo koji e$titet mo7ete se redsta)iti objekt$om. Ukoliko )am je u roramu$eo-od$o da redsta)ite $eku 7i)oti$ju reimo sa $jea mo7ete redsta)iti objektom.Ukoliko 7elite da redsta)ite dr)o 5kolu uliu.... s)e to mo7ete redsta)iti objektom.

    U0e;emo jeda$ rimer reimo treba da rika7emo sa i $ara)i;emo jeda$ objekat 9bi;ere#i $e5to kas$ije o tome kako se kreira objekat: koji sme5tamo u rome$lji)u $pas. Baj asima $eke karakteristike i $eka o$a5a$ja. Od karakteristika mo7emo da i0d)ojimoE du7i$udlake boju dlake )isi$u du7i$u u5iju da li je as 7e$ka ili mu7jak i tako dalje. @$a#ikarakteristike oisuju 7i)oti$ju tj. sa. U objekt$om roramira$ju te karakteristike se$a0i)aju atributi ili olja. @$a#i objekat se sastoji od atributaFolja i o$i oisuju sta$je objekta.

    Drua st)ar koju mo7emo osmatrati je o$a5a$je sa ili $eka rad$ja sa. Bo mo7e da budeE-oda$je tr#a$je laja$je skaka$je ujed i tako dalje. Bako da as ored s)oji- karakteristikaima i o$a5a$je. Bo o$a5a$je re)ede$o $a OO je0ik redsta)ljaju metode. @$a#idola0imo do 0aklju#ka da objekat ima atribute i metode. Atributi oisuju sta$je objekta ametode oisuju rad$ju objekta. U OOP modu to bi iledalo o)akoE

    $pas->boja_dlake= crna; //osta)ljamo da as ima r$u dlaku$pas->visina= 45; //osta)ljamo da je as )isok 4!m$pas->lajanje(); // o0i)amo metudu koja simulara laja$je sa

    $pas->trcanje(); //o0i)amo metodu koja simulira$je tra$je sa

    Kao 5to se )idi objekti o0i)aju atribute i metode tako 5to se r)o $ai5e rome$lji)aobjekta 9$pas: a 0atim se doda 9->: i $a kraju $a0i) metode ili $a0i) atributa. ")e o)osamo o sebi i $ema $eko smisla $eo-od$o je objas$iti i 5ta su klase kako se kreirajuobjekti kako se kreiraju atributi i metode i tek o$da ;e slika o OOP biti $e5to jas$ija.

    1.2 Klase

    Klasu mo7emo s-)atiti kao =fabriku? 0a kreira$je objekata. Klase redsta)ljaju $eku 5emu ili5ablo$ kako ;e se kreirati objekti i kako ;e o$i i0ledati. U klasi defi$i5emo i atribute imetode objekta. O$a bi i0 $a5e rimera i0ledala o)akoE

    classPas{

    pblic$boja_dlake;pblic$visina;

    !nctionlajanje(){

    "!nctiontrcanje(){

    4

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    5/34

    ""

    Kao 5to se )idi klase se kreira tako 5to se $ai5e klju#$a re# classi $ako$ toa dola0iroi0)olj$o ime klase u $a5em slu#aju as. 'ako$ te deklaraije ot)ara se )iti#asta 0aradai $a kraju i 0at)ara. ")e 5to se $ala0i i0me(u )iti#asti- 0arada redsta)lja $eku strukturu ilidefi$iiju klase.

    Atributi se defi$i5u )rlo jed$osta)$o r)o se uotrebi klju#$a re# koja uka0uje $a ristu i)idlji)ost atributa pblic9o tome $e5to kas$ije: i $ako$ $je samo se $a0$a#e atributi kaoobi#$e rome$lji)e $boja_dlake ili $visina i tako je budu;em objektu ridotatakarakteristika koju o$ oseduje. Po$a5a$je objekta ili metode se defi$i5u tako 5to se $a)edeklju#$a re# !nction i $ako$ toa sledi $a0i) metode obi#$e 0arade a )iti5aste. Uobi#$im 0aradama se uisuju arametri 9otu$o ide$ti#$o kao i kod obi#$e fu$kiju uroedural$om re7imu: ili mou da budu ra0$e kao u $a5em slu#aju a i0me(u )iti5asti- sedefi$i5e o$a5a$je ili rad$ja koja treba da se i0)r5i $ako$ o0i)a te metode i taj deo i0me(u)iti#asti- 0arada se $a0i)a telo metode.

    Dola0imo sada do ita$ja kako kreirati objekat u0 omo; klase. Bo je jako jed$osta)$o i #i$ise $a slede;i $a#i$E

    $pas = ne#Pas();

    Da bi se kreirao objekat $a)odi se $a0i) objekta koji je roi0)olja$ $pas 0atim sledi 0$akjed$akosti dola0i re0er)isa$a re# ne# i $a kraju $a0i) klase sa ra0$im 0aradama9$ara)$o ra0$e su jer $ema arametara ostoje rimeri i kada se koriste arametri ali otome kas$ije:.

    O)o je $ajjed$osta)$iji i os$o)$i rimer kako se kreiraju klase i objekti i 5ta sadr7e. "ada;emo dati komleta$ rimer kako bi to i0ledaloE

    classPas{

    pblic$boja_dlake;pblic$visina;

    !nctionlajanje(){eco%avav avav%;

    "!nctiontrcanje(){

    eco%trci& trci&%;"

    "

    $pas = ne#Pas();$pas->boja_dlake= %crna%;$pas->visina= 45;$pas->lajanje();eco%'br/>%;$pas->trcanje();

    eco%'br/>%;eco$pas->boja_dlake;eco%'br/>%;

    !

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    6/34

    eco$pas->visina;

    $a mo$itoru kao re0ultat o)o koda bi isaloE

    avav avavtri& tri&crna45

    Pre $eo 5to $asta)io dalje uoredi;emo rimer d)e biblioteke msGl i msGli. Obe seod$ose $a ko$ekiju i ma$iulaiju sa ba0om s tim 5to je r)a roedural$a a druaobjekt$a. O)ako bi to i0ledaloE

    msGl bibliotekaE

    $ser = serna&e;$pass#ord = pass#ord;$database = database;$ost = localost;

    &*s+l_connect($ost,$ser,$pass#ord); //konekcija na server&*s+l_select_db($database); //konekcija na ba$+er* = .0123 .3 korisnici (id, i&e, prei&e) 67810 (9,%Pera%,%Peric%); //pisanje pita&*s+l_+er*($+er*); //ivr:avanje pita&*s+l_close(); //atvaranje konekcije

    msGli bibliotekaE

    $ser = serna&e;$pass#ord = pass#ord;$database = database;$ost = localost;

    $&*s+li = ne# &*s+li($ost,$ser,$pass#ord, $database); //konekcijana server i ba$+er* = .0123 .3 korisnici (id, i&e, prei&e) 67810 (9,

    %Pera%,%Peric%); //pisanje pita$&*s+li->+er*($+er*); //ivr:avanje pita$&*s+li->close(); //atvaranje konekcije

    Kao 5to se i )idi $ema )elike ra0like u )eli#i$i i obimu koda 9u o)om rimeru: i o$ jeoslu7io samo da se )idi koja je ra0lika u si$taksi u od$osu $a roedural$o i objekt$ororamira$je.

    1.3 Atributi i modifkatori

    6

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    7/34

    /a$ije je bilo re#i o atributima i 5ta o$i redsta)ljaju.. Atributi kao 5to smo rekli oisujusta$je objekta. Ukoliko imamo rimer da je objekat as atributi mou bitE boja dlake )isi$aol starost i tako dalje. Vrati;emo se o$o)o $a $a5 rimer sa somE

    classPas{

    pblic$boja_dlake;pblic$visina;

    !nctionlajanje(){eco%avav avav%;

    "!nctiontrcanje(){

    eco%trci& trci&%;"

    "

    Ukoliko 7elimo da dodelimo $ekom atributu $eku )red$ost to radimo $a slede;i $a#i$E

    $pas = ne#Pas();$pas->boja_dlake= %crna%;eco$pas->boja_dlake;

    'a ekra$u bi se oja)iloEcrna

    Pr)o smo kreirali objekat $pas a 0atim o0)ali atribut boja_dlakei dodelili joj r$u boju. sad dola0i $a red ita$je #emu slu7i pblic. "a pblicIom o0$a#a)amo da je atribut

    ja)$i i da mo7e s)ako da mu ristui. Ba#$ije mi smo kreirali objekat $pas i direkto u0omo; ->boja_dlake mu ristuili. Me(utim to u raksi i $ije $ajbolje re5e$je i u)ek sei0bea)a ta mou;$ost. M$oo je bolje i amet$ije koristiti re0er)isa$u re# privateprivateora$i#a)a ra)o ristua samo $a klasu i taj atribut mo7ete o0)ati samo i0klase dok atribut o0$a#e$ kao pblic mo7ete o0)ati i i0 klase i )a$ $je. O)ako bi toi0ledaloE

    classPas{

    private$boja_dlake;private$visina;

    !nctionlajanje(){eco%avav avav%;

    "!nctiontrcanje(){

    eco%trci& trci&%;"

    "

    $pas = ne#Pas();$pas->boja_dlake= %crna%; // boja_dlake;

    %

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    8/34

    O)aj kod $e bi se i0)r5io jer oku5a)amo da ristuimo atributu boja_dlake a o$ jeo0$a#e$ kao private. O$da se osta)lja ita$je kako se ristua tim atributima. Bo se radie$kasulaijom kreiraju se et i set metode. Bo bi i0ledalo o)akoE

    classPas{private$boja_dlake;private$visina;

    !nction@etAojaBlake(){retrn $tis->boja_dlake;

    "!nctionsetAojaBlake($bojaBlake){

    $tis->boja_dlake = $bojaBlake;"!nctionlajanje(){

    eco%avav avav%;"!nctiontrcanje(){

    eco%trci& trci&%;"

    "

    $pas = ne#Pas();$pas->setAojaBlake(%crna%);eco$pas->@etAojaBlake();

    'a ekra$u bi se oja)iloEcrna

    Bime smo 0a5titili atribut od direkt$o ristua i omou;ili da mu se ristua reko set i etmetoda. Bo se u roramira$ju $a0i)a e$kasulaija. Preko metode set osta)ljamo)red$ost a reko metode et u0imamo )red$ost 9$aredba retrn)raa )red$ost i i0la0i i0metode:

    Postoji jo5 jeda$ modifikator a to je protected. O$ tako(e $e do0)olja)a da se ristuii0)a$ klase ali 0a ra0liku od private o$ do0)olja)a ristu i $asle(e$oj klasi 9$e5to

    kas$ije o tom: dok privatedo0)olja)a ristu samo u datoj klasi.

    Da re0imiramoEKada je $eki atribut ili $eka metoda ri)at$a tj. isred $a0i)a atributa i metode stojiprivate 9u0mimo 0a rimer atribut boja_dlake kod sa: to 0$a#i da atributuboja_dlakemo7ete ristuiti "AMO i "AMO u$utar date klase ta#$ije i0 tela klase. ")akioku5aj ristua tom atributu )a$ klase redsta)ljao bi resku. Belo klase redsta)lja rostori0me(u )iti#asti- 0arada

    classPas{

    // telo klase"

    &

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    9/34

    a rema tome o)o bi $esum$ji)o bila re5kaE

    classPas{private$boja_dlake;

    "

    $pas = ne#Pas();$pas->boja_dlake= %crna%; //

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    10/34

    pblicpis8Aa(){

    "pblicpis8.ndeC(){

    ""

    $slba = ne#00lba();$slba->proveraAodova();$slba->pis8Aa();$sl*ba->pis8.ndeC();

    O)aj kod re)ede$ u raksi bi 0$a#ioE dola0imo $a 5alter i dajemo i$de. @atim ka7emoslu7be$ii da ro)eri broj bodo)a. O$a ro)era)a i ka7e da je uredu $ako$ toa ka7emo jojda $as ui5e u ba0u 5to o$a i #i$i i $a kraju da $am s)e to ui5e i u i$de. O$a uisuje ui$de i )ra;a $am kro0 5alter. Me(utim da li je u raksi ba5 tako da li )i o)orite 5ta

    slu7be$ia da radi ili o$a sama 0$a s)oj osao> 'ara)$o da 0$a 5ta joj je #i$iti 0ato mi i $emoramo da joj ri#amo korake )e; samo da joj damo i$de i ka7emo da 7elimo da ui5emoodi$u a o$a sama oba)lja taj osao. U tom slu#aju mi $e moramo da 0$amo da li ;e o$aro)era)ati bodo)e da li treba da $as ui5e u ba0u i ili mo7da treba jo5 1+ak st)ari da uradi.Bo $as $e 0a$ima i to je $je$ osao. 'a5e je samo da ka7emo da 7elimo da budemo uisa$iu $o)u 5kolsku odi$u i to je to. O$da bi to redsta)ili $a o)aj $a#i$E

    class00lba{

    pblicpisiproveraAodova();

    $tis->pis8Aa();$tis->pis8.ndeC();"privateproveraAodova(){

    "privatepis8Aa(){

    "privatepis8.ndeC(){

    "

    "

    $slba = ne#00lba();$slba-> pisi

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    11/34

    1.4 Metode i parametri

    Do sada smo objas$ili 5ta su metode. O$e redsta)ljaju o$a5a$je klase. U red-odomrimeru set i et tako(e redsta)ljaju metode 9@etAojaBlake(),setAojaBlake($bojaBlake): s tim da drua metoda ima jeda$ arametar$bojaBlakePreko arametra metodi rosledjujemo $eku )red$ost 0atim se ta )red$ostobradi i re0ultat )rati. U red-od$om rimeru o)aj arametar je slu7io samo da bi atributu$boja_dlakeu kalsi Pas dodelili )red$ost. )o rimera kako metoda rima arametre isabira i- i )ra;a re0ultatE

    classDate&atika{

    !nctionsaberi($brojE, $brojF){$bir = $brojE G $brojF;retrn$bir;

    ""

    $&at = ne#Date&atika();$reltat = Hbir je $&at->saberi(9,I);eco$reltat;

    Kao 5to se )idi metode otu$o $a isti $a#i$ fu$kio$i5u kao i fu$kije u roedural$omroramira$ju samo 5to se o0i)aju reko objekta u o)om slu#aju reko $&at.

    1. !tati"ke metode

    Metode mou biti i stati#ke. Bo 0$a#i da $isu )e0a$e 0a ko$kret$i objekat )e; seo0i)aju reko klase. Ba#$ije $e mora biti kreira$ objekat da bi ste o0)ali metodu )e; tomo7etu uraditi direkt$o reko ime$a klase. Bo bi i0ledalo o)akoE

    classDate&atika{

    static!nctionsaberi($brojE, $brojF){$bir = $brojE G $brojF;retrn$bir;

    ""

    $reltat = Hbir je Date&atikaJJsaberi(9,I);eco$reltat;

    11

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    12/34

    Po$ekad su stati#ke metode koris$ije i uotreblja)aju se o$da kada $ije $eo-od$o da sekreira objekat )e; kada je loi#$ije da metoda bude )e0a$a 0a jed$u klasu.

    Metode kao i atributi mou imati modifikatore i )ladaju otu$o ista ra)ila kao i 0a atribute.O$i se dodaju r)i isred !nctioni static 9ako je metoda statika:

    1.# Ko$kstruktori

    Do sada $ismo omi$jali $iti kreirali ko$struktore ali s)aka klasa oba)e0$o sadr7iko$struktor. O$da se osta)lja ita$je kako to da $ismo isali ko$struktore ako s)aka klasamora da sadr7i jeda$ a roram je radio >

    Odo)or je da ukoliko mi $e kreiramo ko$struktor to klasa radi automatski 0a $as.

    Ko$struktori je 0ara)o obi#$a metoda koja se automatski o0i)a ri kreira$ju objekta. @$a#i

    to je metoda koja se u)ek o0i)a i to ri kreira$ju obejkta.

    Kada $ai5emo o)akoE

    classPas{

    private$boja_dlake;private$visina;

    !nctionlajanje(){eco%avav avav%;

    "!nctiontrcanje(){

    eco%trci& trci&%;"

    "

    to $e 0$a#i da $e ostoji ko$struktor. O$ se automatski kreira. Baj kod je ek)i)ale$tat o)omE

    classPas{

    private$boja_dlake;private$visina;

    pblic !nction__constrct(){

    "

    !nctionlajanje(){eco%avav avav%;

    "!nctiontrcanje(){

    eco%trci& trci&%;"

    "

    12

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    13/34

    Ko$struktor mora imati odredje$u formu i metoda mora da se 0o)e ili __constrct() ilikao i $a0i) klase. Ko$struktor slu7i da bi se i$iijali0o)ale rome$lji)e $a samom o#etku.

    Poledajmo rimerE

    classPas{

    private$boja_dlake;private$visina;

    pblic !nction__constrct(){$tis->boja_dlake= %crna%;$tis->visina= 45;

    "

    !nctionlajanje(){eco%avav avav%;

    "!nctiontrcanje(){

    eco%trci& trci&%;"

    "

    Bo 0$a#i da ukoliko $ai5ete $pas = ne# Pas(); tada ;e i atributi biti i$iijali0o)a$i ibie im dodelje$a )red$ost. O$da $ije $eo-od$o seto)ati te atribute $ak$ad$o reko set

    metode jedi$o ako -o;ete da rome$ite te )red$osti.

    " ob0irom da je ko$struktor metoda i o$ mo7e imati arametre. Ko$struktor mo7emo$aisati i o)akoE

    pblic !nction__constrct($bojaBlake, $visina){$tis->boja_dlake= $bojaBlake;$tis->visina= $visina;

    "

    U tom slu#aju bi objekat kreirali $a o)aj $a#i$E

    $pas = ne#Pas(%crna%, 45);

    1.% Ko$sta$te

    Klasa mo7e sadr7ati i ko$sta$te koje $isu )e0a$e 0a objekte )e; samo 0a klasu.Bako klasa Matematika bi mola imati ko$sta$tu i. O$a je $e 0a)is$a od bilo ko objekta ibilo koje matemati#ke fu$kije i u)ek je 3.14. O$e se redsta)ljaju tako 5to se isre $a0i)a

    13

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    14/34

    ko$sta$te doda klju#$a re# const. Ula)$o se i5u )elikim slo)ima to je $eko $e isa$ora)ilo radi lak5e s$ala7e$ja roramera. PrimerE

    classDate&atika{

    constP. = 9E4;

    static!nctionpo&noi0aP.($brojE){$proivod = $brojE K sel!JJP.;retrn$proivod;

    ""

    Ko$sta$te se i0)a$ klase o0i)aju reko $a0i)a klase Date&atikaJJP. a u samoj klasireko klju#$e re#i sel! $a o)aj $a#i$ sel!JJP.

    1.& 'asle(i)a$je

    Dola0imo do dela de objekt$o orije$tisa$o roramira$je dobija u$o $a 0$a#aju.Do sada je bilo re#i o os$o)im ojmo)ima u klasama i objektima a sada dola0e $aj0$a#aj$ijidelo)i OOPa.

    Jta je 0ara)o $asle(i)a$je>")aka klasa sadr7i odre(e$e atribute i metode reko koji- se oisuje sta$je i o$a5a$je iste.@amislimo da u roramu kreiramo d)e klase od koji- obe sadr7e dobar deo isto koda.

    Ba#$ije sadr7e $ekoliko 0ajed$i#ki- rome$lji)i- i 0ajed$i#ki- metoda koje moraju da buduide$ti#$e. /eimo -o;emo da kreiramo klasu Pas i klasu Ma#ka. Obe klase redsta)ljaju7i)oti$je i obe klase imaju $eke 0ajed$i#ke osobi$e kao 5to suE )isi$a te7i$a -oda$jetr#a$je i tako dalje. Ali ored 0ajed$i#ki- osobi$a ostoje i o$e seifi#$e. /eimo as lo)ima#ke dok ma#ka lo)i mi5a as laje a ma#ka mjau#e i tako dalje.

    A$alo$o tome imamo d)e klaseE

    classPas{

    private$teina;private$visina;private$broj8vaceniDacaka;

    pblic !nction__constrct($teina,$visina,$broj8vaceniDacaka){

    $tis->teina= $teina;$tis->visina= $visina;

    $tis->broj8vaceniDacaka= $broj8vaceniDacaka;"

    !nctiontrcanje(){eco%trci& trci&%;

    "

    14

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    15/34

    !nctionloviDack(){eco$tis->broj8vaceniDacakaG= E;

    ""

    classDacka{

    private$teina;private$visina;private$broj8vaceniDiseva;

    pblic !nction__constrct($teina, $visina,$broj8vaceniDiseva){

    $tis->teina= $teina;$tis->visina= $visina;

    $tis->broj8vaceniDiseva= $broj8vaceniDiseva;"

    !nctiontrcanje(){eco%trci& trci&%;

    "!nctionloviDisa(){

    eco$tis->broj8vaceniDisevaG= E;"

    "

    Kao 5to se )idi i klasa Pas i klasa Ma#ka imaju $eke 0ajed$i#ke atribute i metode. U o)omrimeru ra0likuju se samo o tome 5to ma#ka lo)i mi5a a as ma#ku. Led$o od os$o)$i-ra)ila roramira$ja je nika#a ne iati je#an isti ko# na #$a ra%&i'ita esta ((( Bo 0$a#ida kod u elom roramu mora biti jedi$st)e$. /eimo mi imamo metodu trcanje()i o$ase $ala0i u obe klase. Ukoliko kas$ije 7elimo da je i0me$imo me$ja;emo $a oba mesta.@amislimo da imamo 1+++ 7i)oti$ja i $a 1+++ mesta metodu trcanje()i da treba s)akuda i0me$imo I osao oroma$ re0ultat mali.

    'asle(i)a$je $am re5i)a o)aj roblem. O$o slu7i da se s)i 0ajed$i#ki odai smeste uroditeljsku klasu a seifi#$i u $asle(e$u. U $a5em slu#aju roditeljska klasa bi sadr7ala

    0ajed$i#ke metode i atribute koje imaju klase Pas i Ma#ka. 'ju bi moli da $a0o)emoi)oti$ja. Ba klasa sadr7ala bi 0ajed$i#ke atribute i metode obe klase a seifi#$e rad$je bireustila seifi#$im klasama.

    classHivotinja{

    private$teina;private$visina;

    pblic !nction__constrct($teina, $visina){

    $tis->teina= $teina;$tis->visina= $visina;

    1!

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    16/34

    "

    !nctiontrcanje(){eco%trci& trci&%;

    ""

    Klasa @i)oti$ja u o)om rimeru sad7i samo atribute i metode koje su sajed$i#ke i 0a klasuPas i 0a klasu Maka. "ada 0elimo da kreiramo $o)e klase Pas i Maka tako da iskoristimofu$kio$al$ost klase @i)ot$ja. O$o sto ;emo morati da uradimo to je da $asledimo klasu@i)oti$ja. 'asle(i)a$je se #i$i omo;u klju#$e re#i eCtends

    classPas eCtendsHivotinja{

    private$broj8vaceniDacaka;

    pblic !nction__constrct($teina, $visina,$broj8vaceniDacaka){

    parentJJ__constrct($teina, $visina); $tis->broj8vaceniDacaka= $broj8vaceniDacaka;

    "!nctionloviDack(){

    eco$tis->broj8vaceniDacakaG= E;"

    "

    Kao 5to se )idi i0 klase Pas su i0ba#$e s)e metode i atributi koji ostoje u klasi @i)oti$ja jeri- klasa Pas s)e $asle(uje. 'o)i$a u o)oj klasi je ta da ko$struktor rima idalje arametre$teina i$visina a ti- arametara $emamo u datoj klasi. Bako je o$i $e ostoje u$asle(e$oj klasi 9Pas: ali ostoje u roditeljskoj klasi 9@i)oti$ja:. Kada smo rimili tearametre $eo-od$o je o0)ati $adre(e$i ko$struktor tj. roditeljski ko$struktor i rosleditiim date arametre. Bo se #i$i omo;u klju#$e re#i parent. Ba klju#a$ re# mo7e da seuotrebi bilo 0a o0i)a$je ko$struktora bilo 0a o0i)a$je metoda $adre(e$e klase.

    VA'OC'adre(e$i ko$kstruktori u PHPu se $e o0i)aju automatski kao 5to je kod LAV i N slu#aj)e; mora se o0)ati $eosred$o kori5;e$jem klju#e$ re#i parent.

    Klasa Ma#ka bi i0ledala o)akoE

    classDacka eCtendsHivotinja{

    private$broj8vaceniDiseva;

    pblic !nction__constrct($teina, $visina,$broj8vaceniDiseva){

    parentJJ__constrct($teina, $visina); $tis->broj8vaceniDacaka= $broj8vaceniDiseva;

    16

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    17/34

    "!nctionloviDisa(){

    eco$tis->broj8vaceniDisevaG= E;"

    "

    ,0 o)o rimera se )idi da smo 0ajed$i#ke odatke odili $a )i5i 9abstrakt$iji: $i)o aseifi#e$e sustili $a $i7i 9seifi#$iji: $i)o. "ada )i5e $ema dulira$ja koda i o)im smoskratili )reme ra0)oja reled$osti i smaljili mou;$ost re5aka u daljem rojekto)a$ju.

    Jta bi)a ako $am sada u klasi Pas 0atreba $jeo)a te0i$a> /eimo -o;emo daimleme$tiramo metodu da $a mo$itoru isi5e koliko se as uojio ta#$ije koliko tre$ut$oima kilorama ako mu se od s)ake ulo)lje$je ma#ke o)e;a te7i$a 0a 1++ r. Bo bii0ledalo o)akoE

    classPas eCtendsHivotinja{

    private$broj8vaceniDacaka;

    pblic !nction__constrct($teina, $visina,$broj8vaceniDacaka){

    parentJJ__constrct($teina, $visina); $tis->broj8vaceniDacaka= $broj8vaceniDacaka;

    "!nctionloviDack(){

    eco$tis->broj8vaceniDacakaG= E;

    "!nctionpovecaj3ein(){$povecanje3eine= $tis->broj8vaceniDacakaK LE;$nova3eina = $tis->teinaG $povecanje3eine;eco$nova3eina;

    "

    "

    Pr)a li$ija koda u metodi povecaj3ein()ra#u$a )red$ost koliko se uku$o as $aojiood ma#aka ako je 0a s)ako ulo)lje$u ma#ku dobio o 1++r. Drua li$ija koda tu )red$ost

    sabira sa tre$ut$om te7i$om sa a tre;a li$ija koda rika0uje re0ultat. ,srobajmo da )idimokako radiE

    $pas = ne#Pas(F5, 95, F);$pas->povecaj3ein();

    Kreiramo objekat as sa te7i$om od 2!k )isi$om 3!k i sa 2 ulo)lje$e ma#ke. Prema$a5im rora#u$ima $ako$ i0)r5a)a$ja o)o koda re0ultat bi bio

    2!.2

    1%

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    18/34

    Me(utim $ako$ i0)r5a)a$ja koda )idimo da je re0ultat +.2. Kre$imo redom da a$ali0iramokodE

    $povecanje3eine= $tis->broj8vaceniDacakaK LE;$a5 slu#ajE $povecanje3eine= F K LE;)red$ostJ $povecanje3eine= LF;

    $nova3eina = $tis->teinaG $povecanje3eine;$a5 slu#ajE $nova3eina= F5 G LF;)red$ostJ $nova3eina= F5F;

    eco$nova3eina;$a5 slu#ajE 2!.2

    Po loii o)o je sas)im kako treba ali de je re5ka.

    Ukoliko oledamo klasu @i)oti$ja uo#i;emo o)oE

    private$teina;

    Atribut te7i$a je ri)at$i atribut i kao 5to smo ka0ali ra$ije o$ do0)olja)a o0i) to atributasamo i0 s)oje klase ta#$ije klase @i)oti$ja.

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    19/34

    classHivotinja{

    private$teina;private$visina;

    pblic !nction__constrct($teina, $visina){$tis->teina= $teina;$tis->visina= $visina;

    "

    !nctiontrcanje(){eco%trci& trci&%;

    "!nctionloviMran(){

    eco%lovi& ran%;"

    "

    classPas eCtendsHivotinja{

    private$broj8vaceniDacaka;

    pblic !nction__constrct($teina, $visina,$broj8vaceniDacaka){

    parentJJ__constrct($teina, $visina); $tis->broj8vaceniDacaka= $broj8vaceniDacaka;

    ""

    Ukoliko kreiramo objekat klase Pas i o0o)emo metodu loviMran() $a ekra$u ;e serika0ati lovi& ran(mo7emo da o0o)emo tu metodu jer je o$a defi$isa$a u klasi@i)oti$ja a kako je klasa Pas $asle(uje o$da je s)e reular$o). Me(utim mi $e 7elimo dase to rika7e jer 0$amo 5ta as lo)i i -o;emo da se $a ekra$u rika7e lovi& &ake. Bo;emo uraditi tako 5to ;emo dodati tu metodu u klasi Pas. Bo bi iledalo o)akoE

    classPas eCtendsHivotinja{

    private$broj8vaceniDacaka;

    pblic !nction__constrct($teina, $visina,$broj8vaceniDacaka){

    parentJJ__constrct($teina, $visina); $tis->broj8vaceniDacaka= $broj8vaceniDacaka;

    "

    !nctionloviMran(){eco%lovi& &ake%;

    1*

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    20/34

    ""

    "ada ako kreiramo objekat klase Pas i o0o)emo metodu loviMran() $a ekra$u ;eisati lovi& &ake. Mo7da je sada $edoumia oko toa koju ;e metodu o0)ati metodu

    loviMran()u klasi @i)oti$ja ili u klasi Pas. Prilikom odabira metode u)ek se r)o ledametoda koja se $ala0i u i$sta$ira$oj klasi ta#$ije u klasi i0 koje je kreira$ objekat. Kako je$a5 objekat i$sta$a klase Pas r)o ;e se i0)r5iti metoda u toj klasa a ako metoda $eostoji u toj klasi 9kao u malore(a5$jem slu#aju: o$da se o0i)a roditeljska metoda. O)ajsistem se 0o)e rikri)a$je metoda.

    Bo je dosta koris$o i )rlo #esto se rime$juje u roramira$ju. U $a5em slu#aju bi bilokoris$o ukoliko bi smo 7eleli da kreiramo klasu $eke 7i)oti$je a da $e 0$amo #ime se o$a-ra$i. Led$osta)$o $e bi u toj $o)oj klasi dodali metodu ulo)iHra$u9: tj. $e bi rikriliroditeljsku metodu i u)ek kada bi je i0 rorama o0)ali isalo bi =lo)im -ra$u?.

    1.1+ Abstrakt$e klase

    Poledajmo red-od$i rimer

    classHivotinja{

    private$teina;private$visina;

    pblic !nction__constrct($teina, $visina){$tis->teina= $teina;$tis->visina= $visina;

    "

    !nctiontrcanje(){eco%trci& trci&%;

    "!nctionloviMran(){

    eco%lovi& ran%;"

    "

    Ukoliko dobijemo 0a-te) da "V klase koje $asle(uju klasu @i)ori$ja moraju dareimleme$tiraju metodu ulo)iHra$u9: 9ta#$ije da dodaju tu metodu u s)oju klasu: o$da seosta)lja ita$je 5ta ;e $am ta metoda u roditeljskoj klasi ako $ikada $e;e biti i0)r5e$a.Ba#$ije ako 0a s)aku 7i)oti$ju 0$amo #ime se -ra$i o$da $am o)a e$eral$a metoda i $ijeotreb$a. O$o 5to $ama treba sada u roditeljskoj klasi je samo otis metode 9u otismetode sada modifikator re0er)isa$a re# fu$tio$ ime metode i arametri koje o$a rima:ali $e i telo. Bo mo7emo $aisati o)akoE

    !nctionloviMran();

    O)a li$ija koda je ore5$a jer osle $a0i)a metode i arametara koje rima o#ekuju se)iti#aste 0arade i telo metode. Da bi o)o re5ili mo7emo da $ai5emo o)akoE

    2+

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    21/34

    abstract !nctionloviMran();

    o)o je sada ok. "ada smo metodu loviMran() o0$a#ili kao abstrakt$u a to 0$a#i daima s)e kao i obi#$a metoda osim tela. ,sred !nctionstoji i klju#$a re# abstractkako

    bi oka0ala da je metoda abstrakt$a i da $ema telo. Do sada je s)e kako treba me(utimidalje ostoji roblem. Obi#$e klase $e mou sadr7ati abstrakt$e metode. Da bi i o)o re5ilimoramo i klasu rolasiti abstrakt$om tako 5to ;emo isred klju#$e re#i class dodatiabstract. Bo bi i0ledalo o)ako

    abstract classHivotinja{

    private$teina;private$visina;

    pblic !nction__constrct($teina, $visina){$tis->teina= $teina;

    $tis->visina= $visina;"

    !nctiontrcanje(){eco%trci& trci&%;

    "abstract!nctionloviMran();

    "

    8la)$a ra0lika i0me(u abstrakt$e i obi#$e klase je ta 5to abstrakt$a klasa $e mo7e da imaobjekat ta#$ije o)o bi sada redsta)ljalo re5kuE

    $ivotinja = ne#Hivotinja(); FF ra5ka

    O$o 5to je jo5 jako )a7$o a to je da s)aka klasa koja $asledi abstrakt$u mora dareimleme$tira s)e $je$e abstrakt$e metode. Bako da s)e klase koje $aslede klasu @i)oti$jamora;e da u sebi defi$i5u metodu loviMran().

    1.11 ,$ter-ejs

    ,$terfejs je jako sli#a$ abstrakt$oj klasi ali ra0lika u tome je 5to abstrakt$a klasa ored

    abstrakt$i- metoda mo7e sadr7ati i obi#$e $e abstrakt$e metoda dok su kod i$terfejsa s)emetode abstrakt$e. O$ se obele7a)a sa klju#$om re#i inter!aceisred $a0i)a i$terfejsa.U $a5em rimeru bi $aisali

    inter!aceHivotinja{!nctionloviMran();

    "

    Prime;ujemo da i ored toa 5to je metoda loviMran()abstrakt$a $ema isred re#i!nction re# abstract. Bo je 0ato 5to i$terfejs i $e mo7e da ima drue metode osimabstrakt$i- tako da se odra0ume)a da su s)e metode abstrakt$e i i0 to ra0loa ta klju#$are# mo7e da se i0osta)i.

    21

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    22/34

    Drua ra0lika u od$osu $a abstrakt$e kalse je ta 5to se i$terfejs $asle(uje klju#$om re#ii&ple&ents dok abstrakt$a klasa klju#$om re#i eCtends.

    classPas i&ple&entsHivotinja{!nctionloviMran(){

    ""Kao i kod abstrakt$i- klasa s)aka klasa koja imleme$tira $eki i$terfejs moraimleme$tirati i s)e $jeo)e metode.

    1.12 tis/ pare$t i sel-

    Do sada smo uotreblja)ali klju#$e re#i tis, parent i self a sada je )remeda ka7emo kada se o$e koriste.

    thisse koristi kada smo u $ekoj klasi i 7elimo da o0o)emo $eku metodu i0 te klase ili seobratimo $ekom atributu i0 te klase.

    abstract classHivotinja{

    private$teina;private$visina;

    pblic !nction__constrct($teina, $visina){$tis->teina= $teina;$tis->visina= $visina;

    "

    !nctiontrcanje(){eco%trci& trci&%;

    "abstract!nctionloviMran();

    "

    parentse koristi kada 7elimo da o0o)emo $eku metodu u roditeljskoj klasi

    classPas eCtendsHivotinja{

    private$broj8vaceniDacaka;

    pblic !nction__constrct($teina, $visina,$broj8vaceniDacaka){

    parentJJ__constrct($teina, $visina); $tis->broj8vaceniDacaka= $broj8vaceniDacaka;

    "!nctionloviMran(){

    eco%lovi& &ake%;"

    22

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    23/34

    "

    U o)om rimeru smo o0)ali $adre(e$i ko$struktor klju#$om re#i are$t. Me(utim mou;eje o0)ati i bilo koju metodu u roditeljskoj klasi. /eimo moli bi smo da sta)imo i o)oE

    classPas eCtendsHivotinja{

    private$broj8vaceniDacaka;

    pblic !nction__constrct($teina, $visina,$broj8vaceniDacaka){

    parentJJ__constrct($teina, $visina); $tis->broj8vaceniDacaka= $broj8vaceniDacaka;

    "!nctionloviMran(){

    eco%lovi& &ake%;"

    !nctionprikai3rcanjePsa(){parentJJtrcanje();

    ""

    self0a o0i)a$je stati#ki- metoda ili ko$sta$ti i0 ostoje;e klase.classDate&atika{

    constP. = 9E4;

    static!nctionpo&noi0aP.($brojE){$proivod = $brojE K sel!JJP.;retrn$proivod;

    ""

    1.13 0uko)a$je iueima

    8re5ke rilikom isa$ja koda se u)ek de5a)aju o$ekad $amer$o o$ekadslu#aj$o. 'ekad i- je jako te5ko otkriti i morali bi ste se o0aba)iti $jima malo detalj$ije kakobi )ideli u0rok lo5e rada alikaije. Leda$ od dobri- $a#i$a ruko)a$jem i0u0eima kojeodr7a)a OO $a#i$ roramira$ja je etio$. @amislete remo da je $eo-od$o dao0o)ete metodu koja ro)era)a da li je u$et emejl sa forme isra)$o formatira$ ta#$ije dali sadr7i jeda$ 0$ak ta#ku i i0me(u $ji- 0$ako)$e $i0o)e. 90$ako)$iQ$i0:90$ako)$iQ$i0:.90$ako)$iQ$i0:

    elite da obe0bedite uis u ba0u samo ra)il$o u$ete email adrese. Ukoliko se to $edoodi otreb$o je isaliti i0u0etak. @a o#etak $ara)i;emo jeda$ skrit koji rima samoarametar =mejl? sa forme ro)era)a da li je o$ isra)a$ i $a os$o)u toa isisuje orukuE

    classNontroller{

    23

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    24/34

    pblic !nctionprivat6r@&enata0aOor&e(){$&ejl = tri&($_P03%&ejl%Q);tr*{

    $tis->proveraDejla($&ejl);$tis->nosDejla8Aa($&ejl);ecoas &ejl je spesno net ba?;

    " catc(1Cception$e) {eco$e->@etDessa@e();

    ""

    private !nctionproveraDejla($&ejl){$ispravanDejl = tre;$ispravanDejl = FFkod 0a ro)eru isra)$osti mejlai!(?$ispravanDejl)

    tro# ne#1Cception(8net &ejl je neispravan);"private !nctionnosDejla8Aa($&ejl){

    FF kod 0a u$os mejla u ba0u"

    "

    8la)$i deo o)o koda je trat- blok. ")e 5to je =sum$ji)o? da mo7e da do)ede do re5kesta)lja se u bloku tr. 'ama je sum$ji)a metoda ro)eraMejla jer mo7e do)esti do re5ke iisaliti i0u0etak ako mejl $ije leo formatira$. Ukoliko do(e do re5ke o$a se obra(uje uat- bloku. ")e $aredbe koje su u tr bloku a $ala0e se isod $aredbe koja je isalilai0u0etak reska#u se i direkt$o se odla0i u at- blok. A$ali0irajmo $a5 rimer

    'eko je sa forme u$eo lo5e formatira$ mejl. Mi smo taka) mejl oslali $a ro)eru o0i)ommetode ro)eraMejla. Ba metoda je ro)erila mejl i u 0a)is$osti od toa dodelila )red$st trueili false rome$lji)oj Risra)a$Mejl. Ukoliko je dodelila )red$ost false i0)r5a)a se isalji)a$jei0u0etka. Bo se #i$i u0 omo; klju#$e re#i t-roS $eS 0atim se doda klasa etio$ kojakao arume$t rima stri$ koji ujed$o redsta)lja obja5$je$je o $astaloj re5i.

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    25/34

    o)a fu$kija ut)r(uje da li ostoji kalsa sa kojom 7elimo da rukujemo. Prima oba)e0a$arametar stri$ koji redsta)lja $a0i) klase i )ra;a trueFfalse u 0a)is$osti da li klasa ostojiili $e. /eimo re i$sta$ira$ja objekta 7elimo da ut)rdimo da li klasa ostoji. Bo bi uradilio)akoE

    i! (class_eCists(%Pas%)) { $pas = ne# Pas();"

    @et_class_&etods

    fu$kija koja )ra;a $a0i)e metoda koje se $ala0e u datoj klasu. 'a0i)e )ra;a u )idu $i0a aarametar koji rima je $a0i) klase ili objekat date klase.

    $&etode = @et_class_&etods(%Pas%);// ili

    $&etode = @et_class_&etods(ne# Pas());

    !oreac ($&etode as $naiv) { eco $naivRn; // ispisje naiv &etode jedan ispoddr@o@"

    @et_class

    )ra;a $a0i) klase 0a dati objekat. Prima jeda$ arametar i$sta$u $eko objekta i $a

    os$o)u $jea u )idu stri$a )ra;a $a0i) date klaseE$&ojPas = ne# Pas();

    eco@et_class($&ojPas); // na ekran Se ispisati Pas

    isQsublassQof

    isituje da li 0a dati objekat je data klasa jed$a od roditeljski- klasa to objekta. U 0a)is$ostiod toa )ra;a true ili false

    $&ojPas = ne# Pas();$s0lba = ne# 00lba();

    i! (is_sbclass_o!($&ojPas, %Hivotinja%)) { eco da, objekat $&ojPas nasleTje klas HivotinjaRn;" else { eco ne, objekat $&ojPas ne nasleTje klas HivotinjaRn ;"

    i! (is_sbclass_o!($s0lba, %Hivotinja%)) { eco da, objekat $s0lba nasleTje klas HivotinjaRn;

    " else {

    2!

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    26/34

    eco ne, objekat $s0lba ne nasleTje klas HivotinjaRn ;"

    ao reltat na ekran bi se pojavilo

    da, objekat $&ojPas nasleTje klas Hivotinjane, objekat $s0lba ne nasleTje klas Hivotinja

    Lo5 sli#$i- fu$kija mo7ete $a;i $a -ttEFFSSS.-.$etFma$ualFe$Fref.lassobj.-

    Primeri i prakse

    Arraist

    /e5ili smo da sami kreiramo klasu koja ;e simulirati listu u koju mou da se dodaju ra0$iobjekti. Ukoliko je $eko bli0ak sa La)om i N om o$da 0$a o #emu ri#amo jer 0ara)o7elimo da $ara)imo ba5 tu klasu i u -u.

    O$o 5to ;e $ama trebati su metode

    add9Robj: I doda)a$je eleme$ta Robj

    remo)e9Ri: I ukla$ja$je eleme$ta $a Ritoj o0iijiremo)uWirst9: I ukla$ja$je r)o eleme$taremo)east9: I ukla$ja$je osle$je eleme$taet"i0e9: I dobija$je broja objekata u listiet9Ri: I )ra;a objekat $a itoj o0iijiismt9: I isituje da li je lista ra0$a ili $e

    ,mleme$taija o)e klase bi iledala o)akoE

    class6rra*7ist { private$ni; private$sie;

    pblic !nction__constrct() { $tis->ni= arra*(); $tis->sie=L; "

    pblic !nctionadd($para&etar) { $tis->ni$tis->sieQ=$para&etar; $tis->sieGG;

    " pblic !nctionre&ove($indeC) {

    26

    http://www.php.net/manual/en/ref.classobj.phphttp://www.php.net/manual/en/ref.classobj.php
  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    27/34

    i!(?$tis->is.ndeCNorrect($indeC)) { retrn !alse; " i!($indeC == L) { $tis->re&oveOirst(); "else i!($indeC == ($tis->sie)-E) { $tis->re&ove7ast(); "else{ !or($i=($indeCGE);$i'$tis->@et0ie();$iGG) { $tis->ni$i-EQ = $tis->ni$iQ; " $tis->ni$tis->sie-EQ=nll; " $tis->sie--; " pblic !nctionre&oveOirst() { arra*_si!t($tis->ni); " pblic !nctionre&ove7ast() { arra*_pop($tis->ni); " pblic !nction@et0ie() { retrn$tis->sie; " pblic !nction@et($indeC) { i!($tis->is.ndeCNorrect($indeC)) { retrn$tis->ni$indeCQ; " retrn !alse; " pblic !nctionis1&pt*(){ retrn$tis->sie== L; " private !nction is.ndeCNorrect($indeC) { retrn?($indeC>$tis->sie-E UU $indeC'L); " "'ako$ kreira$ja o)e klase jed$osta)$o rukujemo eleme$tima u listiE

    $lista = ne#6rra*7ist(); FF kreira$je objekta$lista->add(%neki strin@%); FFdoda)a$je stri$a u listu

    $lista->add(%neki dr@i strin@%); FFdoda)a$je druo stri$a u listu$lista->add(%neki treci strin@%); FFdoda)a$je tree stri$a u listu$lista->re&ove(F); FF brisa$je stri$a iji je i$de 2eco$lista->@et0ie(); FFrika0 broja eleme$ata u listi

    0uko)a$je tekstal$im -ajlama

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    28/34

    oe$9Rmode: Iot)ara$je ko$ekije ka fajlu 9mode uka0uje uisi)a$je ili #ita$je odataka:lose9: I 0at)ara$je ko$ektijeSrite9Rtekst: I uisi)a$je u fajlread9: I #ita$je i0 fajla

    classOileDana@er {

    private$!ile; private$connection;

    const216B = rb; constV2.31 = #b; const6PP1B = ab;

    pblic !nction__constrct($!ile) { $tis->!ile= $!ile; $tis->connection= !alse; " pblic !nctionopen($&ode) { $tis->connection = !open($tis->!ile, $&ode); retrn$tis->connection; " pblic !nctionclose() { retrn?!close($tis->connection); " pblic !nction#rite($teCt) { i!(?$tis->connection)

    retrn !alse;

    !#rite($tis->connection, $teCt); " pblic !nctionread() { i!(?$tis->connection)

    retrn !alse;

    #ile(?!eo!($tis->connection)) { $content = !@ets($tis->connection); " retrn$content; "

    "

    Kada smo kreirali klasu mo7emo )rlo jed$osta)$o uisi)ati i #itati odatke i0 $ekotekstual$o fajlaE

    $!ajl = ne#OileDana@er(%testtCt%); FF u#ita)a$je fajla$!ajl->open([email protected]); FF ot)ara$je ko$ekije 0a uis$!ajl->#rite(%vaj tekst se treba pisati !ajl ???%); FF u$os teksta ufajl$!ajl->close(); FF 0at)ara$je ko$ekije

    $!ajl = ne#OileDana@er(%testtCt%); FF u#ita)a$je fajla

    2&

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    29/34

    $!ajl->open(OileDana@erJJ216B); FF ot)ara$je ko$ekije 0a #ita$je$tekst = $!ajl->read(); FF #ita$je sadr7aja fajla$!ajl->close(); FF 0at)ara$je ko$ekijeeco$tekst; FF rika0 sadr7aja $a ekra$

    0uko)a$je slikama

    PHP biblioteka oseduje jako u$o fu$kija reko koji- mo7e da se ma$iuli5eslikama. Postoje fu$kije 0a sma$ji)a$je slika u)eli#a)a$je se#e$je kreira$je i tako dalje itako dalje. @aista broj o)i- fu$kija je )eliki. Po$ekad ukoliko 7elite da uradite $e5to saslikom $e;ete mo;i samo u0 omo; jed$e fu$kije )e; kombi$aijom $ekoliko $ji-. "ada;emo kreirati klasu koja ima $ajos$o)$ije eleme$te reko koji- mo7ete da ma$iuli5eteslikom. Metode koje ;e biti imleme$tira$e su E

    sa)e9: I s$ima tre$ut$u slikusa)eAs9R$o)aPuta$ja: I s$ima sliku $a $o)oj uta$jeetBe9: I )raa ti slike 9j $...:etXidt-9: I )raa siri$u slikeetHei-t9: I )raa )isi$u slikeresi0eBoHei-t9R)isi$a:I )r5i rome$u )isi$e slike sa o#u)a$jem od$osa 5iri$aE)isi$aresi0eBoXidt-9Rsiri$a: I )r5i rome$u 5iri$e slike sa o#u)a$jem od$osa 5iri$aE)isi$aresi0e9Rsiri$aR)isi$a: I )r5i rome$u 5iri$e i )isi$e slike

    class.&a@e {

    private$pat; private$i&a@e;

    pblic !nction__constrct($pat) { $tis->pat= $pat; $tis->set.&a@e(); " pblic !nctionsave() { $tis->save6s($tis->pat); " pblic !nctionsave6s($ne#.&a@ePat) {

    i!($tis->@et3*pe() == .D6@et3*pe() == .D6i&a@e, $ne#.&a@ePat); "elsei!($tis->@et3*pe() == .D6

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    30/34

    retrn$t*pe; " pblic !nction@etVidt() { list($#idt, $ei@t, $t*pe, $attr) = @eti&a@esie($tis->pat); retrn$#idt; " pblic !nction@etMei@t() { list($#idt, $ei@t, $t*pe, $attr) = @eti&a@esie($tis->pat); retrn$ei@t; "

    pblic !nctionresie3oMei@t($ei@t) { $ratio = $ei@t / $tis->@etMei@t(); $#idt = $tis->@etVidt() K $ratio; $tis->resie($#idt,$ei@t); " pblic !nctionresie3oVidt($#idt) { $ratio = $#idt / $tis->@etVidt(); $ei@t = $tis->@etMei@t() K $ratio; $tis->resie($#idt,$ei@t); "

    pblic !nctionresie($#idt,$ei@t) { $ne#_i&a@e = i&a@ecreatetrecolor($#idt, $ei@t); i&a@ecop*resa&pled($ne#_i&a@e, $tis->i&a@e, L, L, L, L,$#idt, $ei@t, $tis->@etVidt(), $tis->@etMei@t()); $tis->i&a@e= $ne#_i&a@e; "

    private !nctionset.&a@e() { i!($tis->@et3*pe() == .D6pat); " elsei!($tis->@et3*pe() == .D6i&a@e = i&a@ecreate!ro&pn@($tis->pat); " elsei!($tis->@et3*pe() == .D6i&a@e = i&a@ecreate!rob&p($tis->pat); "elsei!($tis->@et3*pe() == .D6pat); "else{

    retrn !alse; " ""

    O)om klasom sada )rlo lako rukujemo E

    $i&@ = ne#.&a@e(%/i&@/plan_@radajp@%); FF u#ita)amo slikueco$i&@->@etVidt(); FF rika0ujemo $a ekra$ 5iri$u slike$i&@->resie3oVidt(FLL);FFme$jamo 5iri$u $a 2++ i odr7a)amood$os 5iri$aE)isi$a$i&@->save6s(%/i&@/plan_@rada_t&bjp@ %); FF s$imamo je od druim

    $a0i)om i tako ra)imo koiju

    3+

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    31/34

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    32/34

    $con = ne#Nonnection();$con->open();$con->+er*(Z.0123 .3 [);$con->close();

    Y>

    ")e ;e to suer raditi dok $e dobijemo 0a-te) da moramo elu alikaiju da remestimo $adrui ser)er. Bo i $ije toliko stra5$o ali 0amislite da taj drui ser)er $e odr7a)a biblioteku&*s+li )e; samo &*s+l. O$da bi morali da i0me$imo o)aj kod u klasi Nonnection

    Bo ;emo modifiko)ati o)akoE

    classNonnection {

    private$link;

    pblic !nction__constrct() { $tis->link= nll; "

    pblic !nctionclose() { &*s+l_close($tis->link); " pblic !nction+er*($+er*) { retrn &*s+l_+er*($+er*, $tis->link); "

    pblic !nctionopen() { $link = &*s+l_connect(M036D1, 80126D1, P600V2B); i! (?$link)

    retrn !alse; $db_selected = &*s+l_select_db(BA_6D1, $link) ;

    i! (?$db_selected) { retrn !alse; " $tis->link= $link; "

    "ada smo re5ili i taj roblem. P- fajl kreira$jeKoris$ika.- $e;emo $i5ta me$jati jer o$o0i)a date metode samo smo rome$ili imleme$taiju u tim metodama. Me(utim 5ta sede5a)a ako dobijemo oba)e5te$je da $a ser)eru od sutra $ije dostu$a biblioteka msGl )e;se u)odi msGli. Bo bi 0$a#ili o$o)$o rera)lja$je ostoje;e klase. Me(utim mi sada-o;emo da re5imo i taj roblem i da $e me$jamu u)ek imleme$taiju klase kad od sest)ari rome$e $a ser)eru.

    /a0motrimo roblem. Potreb$e su $am d)e klase koje ;e ra0li#ito biti imleme$tira$e u0a)is$osti da li je msGl ili msGli biblioteka. Pored toa mi 7elimo da u)ek koristimo iste$a0i)e metoda 0a ko$ekiju 0a i0)r5a)a$je uita i 0a 0at)ara$je ko$ekije. Be otisemo7emo i0d)ojiti u jeda$ i$terfejs. Bo bi i0ledalo o)akoE

    inter!ace.Nonnection{pblic !nctionopen();

    32

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    33/34

    pblic !nction+er*($+er*);pblic !nctionclose();

    "

    elimo da u roramu u)ek koristimo o)e metode a $a koji $a#i$ i kako ;e o$i bitiimlemetira$e to $as $e 0a$ima 9$e 0a$ima $as u fajlu kreiranjeorisnikapp:

    Pored toa morali bi da kreiramo i d)e klase jed$u 0a msGl a druu 0a msGli biblioteku iobe klase bi imleme$tirale o)aj i$terfers.classD*0\7_._Nonnection i&ple&ents.Nonnection{

    private$link;

    pblic !nction__constrct() { $tis->link= nll; "

    pblic !nctionclose() { $tis->link->close(); " pblic !nction+er*($+er*) { retrn$tis->link->+er*($+er*); "

    pblic !nctionopen() { $tis->link = ne#&*s+li(M036D1, 80126D1, P600V2B,BA_6D1); i!(?$tis->link)

    retrn !alse;

    retrn tre;"Y

    i drua klasa

    classD*0\7_Nonnection i&ple&ents.Nonnection {

    private$link;

    pblic !nction__constrct() { $tis->link= nll;

    "

    pblic !nctionclose() { &*s+l_close($tis->link); " pblic !nction+er*($+er*) { retrn &*s+l_+er*($+er*, $tis->link); "

    pblic !nctionopen() { $link = &*s+l_connect(M036D1, 80126D1, P600V2B);

    i! (?$link)retrn !alse;

    33

  • 8/11/2019 Objektno Orijentisano Programiranje u PHP

    34/34

    $db_selected = &*s+l_select_db(BA_6D1, $link) ; i! (?$db_selected) { retrn !alse; " $tis->link= $link; ""

    "ada se osta)lja ita$je kako ;emo o)o iskoristiti. Bo radimo $a slede;i $a#i$E

    Potreb$o je da kreiramo jeda$ i$iijal$i - fajl koji ;e se u)ek r)i o0i)ati u - skritu.O$ ;e odre(i)ati koju klasu koristimo da li M"ZQ,QNo$$etio$ ili M"ZQNo$$etio$.'a0o)imo a i$it.-

    initpp

    'Ypp

    !nction@etNonnection(){retrn ne#D*0\7_Nonnection();

    "

    Y>

    Wajl i$it.- sadr7i samo jed$u fu$kiju @etNonnection() koja )ra;a objekat tiaD*0\7_._Nonnection ili D*0\7_Nonnection . Kod $as tre$ut$o )ra;a objekat tia

    D*0\7_Nonnection.

    "krit kreira$jeKoris$ika.- malo ;emo i0me$iti i o$ ;e iledati o)akoE

    kreiranjeorisnikapp

    'Ypp

    $con = @etNonnection();$con->open();$con->+er*(Z.0123 .3 [);

    $con->close();

    Y>

    i to je s)e CCC

    Ukoliko oet do(e do $eko 0a-te)a da se re(e sa msGl $a msGli biblioteku do)olj$o jesamo i0me$iti u skriti i$it.- da fu$kija etNo$$etio$9: )ra;a $eSD*0\7_._Nonnection()i mi smo $a5 roblem re5ili ostatak koda $e;e se me$jati a ;eri tome i kreira$jeKoris$ika.- skrit ostati isti. Bo je i la)$a red$ost OOPa I ko# kojise &ako o#r)a$aCCC


Recommended