Dobrodošli, goste ( Prijava | Registracija )

Kratak uvod u OO PHP, Objektno Orijentisani PHP

V
kodi
poruka May 5 2009, 21:40
Poruka #1




Grupa: Admin
Poruke: 2,642
Datum reg.: 10-February 05
Lokacija: $52/hour
Član broj: 245



Ova tema sluzi kao kratak tutorijal Objektno Orijentisanog nacina programiranja u PHP-u.
Takodje svrha teme je da pomogne ljudima da shvate osnovne pojmove, kao i razliku u odnosu na obicno (proceduralno) programiranje.
Na kraju cilj je da sto vise ljudi prihvati ovakav nacin programiranja, jer na kraju guramo vec skoro desetu godinu 21. veka smile.gif

Trudio sam se koliko sam mogao da sve bude na Srpskom, neke stvari se jako tesko ili skoro nikako prevode, ako neko ima nekih predloga nek slobodno iznese..



Uvod: Zasto OO?

Zato! smile.gif

Razloga stvarno ima milion:
- kod se lakse odrzava
- kod sam sebe objasnjava (dobro dodje kad otvoris projekat od pre 2 godine)
- veca kontrola nad kodom (videti 1.4)

Postoji urbani mit da OO PHP usporava vase skripte, taj mit je delimicno istinit, ali je to "usporenje" toliko minorno da se u 99.99% slucajeva opusteno moze zanemariti.
Sa druge strane benefit je ogroman.


1) Osnove i Pojmovi

Za pocetak, posto ljudi stalno mesaju pojmove funkcija, klasa, metoda, objekt, varijabla, property....
Da malo objasnimo stvari


1.1 Klase
--------------------------------------------------

Ovo je primer klase
CODE
Class Pas{

    private $telefonVlasnika;
    public $ime;
    
    function podesiImePsa($ime){
        $this->ime=$ime;
    }
    
    function podesiTelefonVlasnika($brojTelefona){
        $this->telefonVlasnika=$brojTelefona;
    }
    
    function procitajTelefonVlasnika(){
        return $this->telefonVlasnika;
    }
    
    function podesiRasu($rasaPsa){
        $rasa='Rasa Podesena na: '.$rasaPsa;
        $this->rasa=$rasaPsa;
        
        return $rasa;
    }
}



1.2 Objekti
--------------------------------------------------

Klasa je samo nacrt, definicija kako objekat treba da izgleda.
Da bi mogli da koristimo sam objekat moramo prvo da ga inicijalizujemo

CODE
$mojPas=new Pas();


$mojPas je objekt
$mojPas je instanca klase Pas
$mojPas nije klasa




1.3 Metode
--------------------------------------------------
sada cemo podesiti ime i telefon vlasnika psa

CODE
$mojPas->podesiImePsa('Rex');
$mojPas->podesiTelefonVlasnika('+381 66 666 666');


podesiImePsa() i podesiTelefonVlasnika() su metode klase, ne funkcije iako ispred njih u definiciju klase stoji function



1.4 $this
--------------------------------------------------
Jedna od najvecih prepreka pocetnicima pri ucenju prestavlja famozna $this pseudo-varijabla
posto smo property ime i telefonVlasnika definisali van metoda da bi smo im pristupili unutar metode moramo staviti $this->ime

takodje ako iz jedne metode pozivamo drugu, to isto radimo sa $this->nekaDrugaMetoda();

$this je najlakse shvatiti kao link ka metodama i propertijima objekta.
takodje, u okviru metoda mozete definisati normalne varijable, za recimo privremene operacije
CODE
    function podesiRasu($rasaPsa){
        $rasa='Rasa Podesena na: '.$rasaPsa;
        $this->rasa=$rasaPsa;
        
        return $rasa;
    }


$rasa i $this->rasa uopste nisu iste varijable.

CODE
echo $mojPas->podesiRasu('opak Pas'); // vraca: Rasa Podesena na: opak Pas
echo '<br />';
echo $mojPas->rasa; // vraca: opak Pas


takodje ne postoji nacin da pristupite lokalnoj (obicnoj varijabli) jednom kad se objekat inicijalizuje, osim da je vratite kroz return

naprimer da smo imali jos jednu varijablu u okviru metode podesiRasu()
recimo $proba='pboba'; kasnije ne bi smo mogli da mu pristupimo kroz inicijalizovan objekat. tj $mojPas->proba nece vratiti nista.


1.5 Object properties
(ne znam kako se ovo prevodi u domacoj literaturi)
--------------------------------------------------

$ime i $telefonVlasnika su properties, to mu dodje kao varijable u proceuralnom programiranju s tim da ovde
imate vecu kontrolu. kontrola se odnosi na public - private svojstva propertija.
primeticete da je ispred imena public a isred broja telefona private

ako ispod ovoga ubacimo sledeci kod
CODE
echo $mojPas->ime; // ovo vraca Rex
echo $mojPas->telefonVlasnika; // ovo vraca Fatal error: Cannot access private property Pas::$telefonVlasnika


to znaci da propertiju telefonVlasnika ne moze pristupiti direktno, vec samo preko metode koja vraca taj property
takodje mozemo direkno menjati public propertije

CODE
$mojPas->ime='Rex Prvi';
echo $mojPas->ime; // ovo vraca Rex Prvi


ako to isto pokusamo za telefonVlasnika

CODE
$mojPas->telefonVlasnika='+381 66 999 999'; // ovo vraca Fatal error: Cannot access private property Pas::$telefonVlasnika


da bi smo procitali property koji je private moramo napisati metodu koja ga vraca, u nasem slucaju to je procitajTelefonVlasnika().
CODE
echo $mojPas->procitajTelefonVlasnika(); //vraca: +381 66 666 666

Go to the top of the page
 
+Quote Post
 
Start new topic

Odgovori

Dead Man Walking
poruka Jan 6 2011, 02:02
Poruka #2




Grupa: Članovi
Poruke: 355
Datum reg.: 12-November 08
Lokacija: Novi Sad / Šid
Član broj: 25,210



Ne znam kako da napravim formu koja u sebi neće imati php. Ili u sistemu koji će pisati greške ili u ponavljanju dobro unetih vrednosti u polja.

Pretpostavljam da bih moglo nekako preko ajax-a pa inner html ili tako nešto?

Kako bi izgledao pravilan model, je l' može neko da mi skicira u par linija?
Go to the top of the page
 
+Quote Post

Poruke u ovoj temi

- kodi   Kratak uvod u OO PHP   May 5 2009, 21:40
- - kodi   Toliko za prviu lekciju evo i cele skripte CODE...   May 5 2009, 21:44
- - stain   evo dok kodi ne napishe evo malog tizera, u dve re...   May 6 2009, 00:28
- - kodi   @stain, premestio sam ti poruku iz one teme, @ost...   May 6 2009, 01:01
- - buger   da li php podrzava dot notation ($this.telefo...   May 8 2009, 19:34
- - kodi   nema dot notation mora $this->param ili ...   May 8 2009, 20:20
- - zlatiborac   Poshto sam reshio da radim neki sajt(ove) iznova k...   May 17 2009, 19:01
- - kodi   eh, pogazio si prvi i najbitniji princip: razdvaja...   May 17 2009, 20:07
- - kodi   takodje svestan sam da ovo i nije bas najdirektnij...   May 17 2009, 20:13
- - Milos Jankovic   procitah ovo, ali i dalje ne shvatam koja je razli...   Jun 19 2009, 23:50
|- - r3d   CITAT (Milos Jankovic @ Jun 20 2009, 00:5...   Jun 20 2009, 05:23
- - kodi   to sam stavio da pokazem da ako je property public...   Jun 20 2009, 00:53
- - Milos Jankovic   hvala vam puno, sad mi je jasno! skapirao sam ...   Jun 20 2009, 12:16
- - kodi   samo polako.. ako ima problema pitaj ovde. takodje...   Jun 20 2009, 12:22
- - r3d   Klase sa loginom funkcionisu kao i bilo sta drugo ...   Jun 20 2009, 15:52
|- - miknik   CITAT (r3d @ Jun 20 2009, 16:52) Klase sa...   Mar 17 2013, 19:37
- - Milos Jankovic   znam kako da napravim login skriptu... ja to radim...   Jun 20 2009, 21:25
- - stain   de nadje onaj tutorial Iz svega ovoga shto pishes...   Jun 20 2009, 23:19
- - Milos Jankovic   ma tutorial sam izguglao uf, problem je sto ja sh...   Jun 21 2009, 00:13
|- - r3d   CITAT (Milos Jankovic @ Jun 21 2009, 01:1...   Jun 21 2009, 04:06
- - zlatiborac   Stain-e iliti Mali Radojice kad si vec pomenuo ho...   Jun 21 2009, 00:26
- - zlatiborac   Staine aka Mali Radojice javiii seeeeeee   Jun 23 2009, 12:59
- - kodi   vi naravno znate da je WP sve osim OO? ako cemo o...   Jun 23 2009, 15:14
- - joes021   imam utisak da se kodi zeza sa vama. Stalno je ne...   Jun 23 2009, 16:23
- - kodi   2) Nasledjivanje Nasledjivanje znaci da jedna kl...   Jun 23 2009, 17:14
- - NVC   Pozdrav Kodi. Pratim ovu temu i odlicno je sto se ...   Jun 23 2009, 17:54
- - r3d   Znaci da se ispred navodnika (' i ") stav...   Jun 23 2009, 19:43
- - Dead Man Walking   Postoji li neki dobar video tutorial na ovu temu k...   Sep 6 2009, 13:24
- - zlatiborac   Ima ih, nije da ih nema, ali su svi oni uzaludni a...   Sep 6 2009, 19:18
- - Dead Man Walking   Obično skidam Lynda.com tutoriale ali vidim da on...   Sep 6 2009, 20:06
- - kodi   pa nemoj da ti bude cudno, ovo i nije nesto sto se...   Sep 7 2009, 00:23
- - jovbranko   CITAT (Dead Man Walking @ Sep 6 2009, 21...   Sep 7 2009, 08:18
- - ile   tek sam sad ovo vidio... kodi, majstore, svaka cas...   Sep 8 2009, 12:15
- - zlatiborac   Ma Kodi je chudo, samo ga stici e to je malo teze....   Sep 8 2009, 16:17
- - ile   CITAT (kodi @ May 5 2009, 22:40) 1.5 Obje...   Sep 8 2009, 23:07
- - zlatiborac   Ile, sunce mu zarko, znash da se St. Kodi ne ispra...   Sep 9 2009, 11:08
- - kodi   e al' nazalost, properties nisu bukvalno ...   Sep 9 2009, 15:19
|- - ile   CITAT (kodi @ Sep 9 2009, 16:19) e al...   Sep 9 2009, 18:18
- - zlatiborac   Haj' se dogovorite, zbunjujete pochetnike samo...   Sep 10 2009, 11:13
- - jovbranko   Mislim da nepotrebno komplikujete stvari... Proper...   Sep 11 2009, 02:08
- - Dead Man Walking   Gledam ovaj php&mysql beyond the basics i ubi ...   Sep 23 2009, 07:07
- - joes021   To smeta i ovima koji antiprotiv parade. Lepo lju...   Sep 23 2009, 16:28
- - Dead Man Walking   Nisam protiv nikakve parade ali me iritira kad nek...   Sep 23 2009, 19:30
- - jovbranko   ^ Pa ti ga nemoj gledati, nije Lynda jedina koja ...   Sep 23 2009, 22:57
- - webarto   Dobro pojašnjeno.   May 17 2010, 14:54
- - webarto   @kodi, što se tiče ovog template enginea, je li ...   Dec 18 2010, 12:45
- - kodi   ne postoji ni jedna moguca prednost a mana ima mi...   Dec 18 2010, 18:41
- - webarto   Ma da, u tome je i čitava poenta. Vidjao sam mnog...   Dec 18 2010, 20:57
- - kodi   Hmmmm Prihvatam da je ovo ok, i da moze da bude k...   Dec 19 2010, 03:13
- - webarto   Pa da tu je to, onda manje-više stvar navike Ja ...   Dec 19 2010, 03:26
- - Dead Man Walking   Gde ide html forma u MVC modelu? Bacio sam se na ...   Jan 6 2011, 01:33
- - webarto   Pa ide u View AJAX? Array sa greškama?   Jan 6 2011, 01:54
- - Dead Man Walking   Ne znam kako da napravim formu koja u sebi neće i...   Jan 6 2011, 02:02
- - webarto   Pa u view ne bi trebao imati ništa više od echo ...   Jan 6 2011, 02:17
- - Dead Man Walking   A kako rešavam warninge pre nego što submitujem ...   Jan 6 2011, 09:58
- - webarto   U kojem FW radiš?   Jan 6 2011, 10:11
- - Dead Man Walking   Hteo sam ovo da napravim custom jer često radim n...   Jan 8 2011, 17:04
- - webarto   Znam, ali te pitam, problem je bez uvrede što jo...   Jan 8 2011, 17:53
- - zlatiborac   CI se sprema za major shuffle tako da ce se josh ...   Jan 8 2011, 19:34
- - Dead Man Walking   Odustao sam od načina na koji sam hteo da uradim ...   Jan 8 2011, 21:13
- - webarto   Pa radi proceduralno, nije sramota, bitno je da je...   Jan 8 2011, 22:03
- - Dead Man Walking   Hteo sam baš objektno da skontam i odgledao sam d...   Jan 8 2011, 22:07
- - webarto   To što si ti htio napisati je više helper klasa,...   Jan 9 2011, 08:50
- - zlatiborac   More gledate do sutra ali taj ahaaaa momenat nece ...   Jan 9 2011, 11:15
- - webarto   Naravno, ne bih da s* ali ja nikad nisam išao po ...   Jan 9 2011, 11:46
- - Mechanic   Kako vam se čini ovaj template engine? http://ww...   Sep 9 2012, 16:33
- - xiper   Ne zelim da spamujem al napalio sam se na ovu temu...   Dec 25 2012, 15:53
- - miknik   bravo majstore kodi odlichno pojashnjen OOP   Mar 17 2013, 01:58
- - miknik   Nisam primetio da je neko rekao,kako je mnooogoo l...   Mar 17 2013, 19:49


Reply to this topicStart new topic

 



Lo-fi verzija Trenutno vreme: Wednesday 19. June 2013 - 10:44

Sve informacije (poruke, teme i sl.) predstavljaju stavove samo njihovih autora.
Objavljivanje informacija sa sajta u nekomercijalne svrhe moguće je samo uz navođenje URL adrese diskusije.
Za sve druge vidove distribucije potrebno je imati izričitu dozvolu administratora Dizajn Zone i/ili autora poruka.
Autorska prava za sadržaj poruke zadržava njihov autor, osim ako nije drugačije naznačeno.

powered by:Plus hosting