Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Videla zaba da se konji potkivaju...ili kako uci u svet OOP???

[es] :: PHP :: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???

[ Pregleda: 2362 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kelja

Član broj: 70429
Poruke: 1416
79.101.140.*



+35 Profil

icon Videla zaba da se konji potkivaju...ili kako uci u svet OOP???21.06.2008. u 14:02 - pre 192 meseci
Elem,
znam da naslov nije u skladu sa temom i da krsim pravila ovog ozbiljnog foruma, ali malo razbibrige nije na odmet.
Ovako,
nesto mi je doslo ovog leta (cari dokolice:)) da se ozbiljno i konacno uhvatim u kostac sa OOP!(Pa kud puklo da puklo!)

E sad, najbolji nacin da 'savladam gradivo' bio bi, prirodno, pokusaj pravljenja neke klasice. Medjutim, tu imam problem...

Svi primeri za vezbu koji su mi pali na pamet, jednostavno uopste i ne demonstriraju prednost OO pristupa, i imam utisak da bih te i slicne probleme jednako kvalitetno resio i obicnim funkcijama...
Recimo, krenuo sam sa pravljenjem klase za validaciju forme i uvideo da mnogo brze i bolje posao odradi set funkcija.

Juce sam kao napravio neku login klasu i dosao do istog zakljucka...

Dakle, moje je pitanje, sta mi vi, iskusni magovi OOP-a preporucujete, koji PHP problem (a da nije preterano slozen) je zgodan za resavanje putem klasa, odnosno na cemu vezbati.

Hvala unapred!
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
77.46.241.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???21.06.2008. u 14:24 - pre 192 meseci
Kako ne vidiš prednosti OOPa? Jesi proučio pojmove "enkapsulacija", "nasleđivanje" i "polimorfizam"?

Kod jednostavnijih poslova jeste jednostavnije koristiti funkcije, ali kod komplikovanijih stvari OOP je obavezan. A i sama činjenica da objekat jedne klase drži sve podatke i metode (funkcije) vezane za istu unutar sebe meni mnogo odgovara i lakše se tako snalazim...

Recimo imaš sistem za fakultet gde imaš studente, profesore i ostalo osoblje fakulteta. Napraviš klasu "osoba" koja sadrži zajedničke elemente (ime, prezime, jmbg, itd...) a onda iz nje samo izvodiš klase za studente (dodaš broj indeksa, smer, godinu, itd...), profesore (šta predaje, kad je zaposlen, ....) i za ostalo osoblje (tu ubaciš ostale podatke koji su potrebni ).

Mislim, ovo je školski primer nasleđivanja ali valjda ilustruje malo prednosti OOPa.

[Ovu poruku je menjao Nemanja Avramović dana 21.06.2008. u 17:44 GMT+1]
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???21.06.2008. u 14:59 - pre 192 meseci
Keljo, uzmi sors nekog dobro napisanog MVC frejmvorka i čitaj. Mada bih ti ja savetovao da iskoristiš svoju volju da učiš i naučiš Rubi i Rejls, skapiraćeš koncepte koje ćeš posle moći da koristiš i u PHP-u, ako ikad budeš poželeo da se vratiš... ;)
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
77.46.178.*



+35 Profil

icon Re: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???21.06.2008. u 16:48 - pre 192 meseci
He he he, @jablane ti konstantno podrivas ugled php-a, i to na php forumu!!!
(Te bolja je asp.NET varijanta, te sad taj Ruby...) ;-)

@Nemanja,
cuo sam ja za te izraze, sta cuo, i cit'o cak ponesto, ali mnogo to meni apstraktno zvuci.

Ne sumnjam ja a u prednosti OOP, daleko bilo, samo sam pomislio da postoji neka oblast, neki php problem koji bi mi dobro 'legao' za vezbu, gde bi do izrazaja dosle te i druge prednosti/pogodnosti...
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
77.46.241.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???21.06.2008. u 17:23 - pre 192 meseci
Evo ti polimorfizam objašnjen na odličnom primeru (bez zezanja ): http://www.kuro5hin.org/story/2006/3/14/175929/544
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
77.46.178.*



+35 Profil

icon Re: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???21.06.2008. u 17:37 - pre 192 meseci
Ha ha, ovo sam jos davno video, postovao si to vec ovde, to su oni brezobrazluci.

E sad, bez zezanja, ima li smilsa napraviti nesto kao, recimo, klasu za paginaciju?

(Posto mi se vec sa loginom i validacijom nije posrecilo) ;)
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
77.46.241.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???21.06.2008. u 17:54 - pre 192 meseci
Pa to jesu bezobrazluci ali odlično objašnjavaju polimorfizam

Takođe, verujem da znaš, ali ipak da pomenem: Pogledaj www.phpclasses.org - tamo ima dosta klasa koje možeš koristiti i iz kojih možeš učiti OOP. Kad sam već kod tog sajta, pogledaj ovo.
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Mister_rap
SE at Viacom

Član broj: 8822
Poruke: 2540
79.101.243.*

Jabber: mister_rap@jabber.com


+21 Profil

icon Re: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???21.06.2008. u 19:02 - pre 192 meseci
Preporucujem ti pregledas neku knjigu poput ove:
http://www.amazon.com/Object-O...ss-Matt-Weisfeld/dp/0672318539

Ako budes nekad koristio neki framework za php moraces da znas oop jer ces nasljedjivati postojece klase i slicno...
Za pocetak mozes da napravis DB klasu recimo ili krenes da radis neki ShoppingCart...
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
77.46.178.*



+35 Profil

icon Re: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???21.06.2008. u 19:59 - pre 192 meseci
Hvala ljudi, kad napravim svoje prvo OOP cedo, postavicu ga ovde, a vi onda kritikujte! ;-)
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???22.06.2008. u 20:48 - pre 192 meseci
Citat:
kelja: He he he, @jablane ti konstantno podrivas ugled php-a, i to na php forumu!!!

Pa red je i ljudi ovde da saznaju da ima nešto bolje... :)

Šalu na stranu, mislim da si preskočio deo moje poruke, tj. postoji i dosta PHP frejmvorka koje, doduše, nisam gledao, ali pretpostavljam da se dosta baziraju na OOP-u.

Počni od sledeće stranice:

http://www.mustap.com/phpzone_post_73_top-10-php-mvc-frameworks
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.telenor.co.yu.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???23.06.2008. u 17:11 - pre 192 meseci
Evo praktican primer oop na primeru db layera.
Sve sto ubacujes u bazu i vadis iz nje od sad koristis kao objekat, iniciras ga recimo ovako:

Code:


class Menu extends Object  {
  function Menu () {
        global $db;
        $this->db = $db;

        $this->tableName = TABLE_EXT . "menu";
        $this->ids = array("menu_id");

        $this->initProperty('menu_id', new IntType());

        $foreignKeyObj = new ForeignKey('MenuCategories', 'cat_name');
        $foreignKeyObj->setAttributes(array("onchange"=>"getSelectBoxElements(this)"));
        $foreignKeyObj->setDefaultSelectedValueId(getGET('fk_category_id'));

        $this->initProperty('fk_category_id', $foreignKeyObj);

        $this->initProperty('base_name', new TextField());

        $parentObj = new InternalKey('Menu', 'base_name');
        
        $this->initProperty('parent_id', $parentObj); 
        $this->initProperty('url', new UrlType());
        $this->initProperty('is_active', new CheckBox());
        $this->initProperty('ordering', new IntType());

                $imgObj = new ImgFile('image_file');
        $imgObj->setUploadDir(UPLOAD_DIR . "menus/");
        $imgObj->setUploadUrl(UPLOAD_URL . "menus/");
        $imgObj->makeThumb = false;
        $imgObj->resizeImage = true;
        $imgObj->imageHeight = 50;
        $imgObj->imageWidth = 50;
//        $imgObj->thumbHeight = 0;
//        $imgObj->thumbWidth = 0;

        $this->initProperty('image_file', $imgObj);



  }
}
        


I sad, svaki tip propertija ima svoje atribute i svojstva (sta vise, svaki property je sam objekat) Ovo je copy-paste, cisto za ideju, da ne objasnjavam sta svaki radi ponaosob (ako te interesuje, pisi).
Cela draz svega toga je upotreba objekta.
Kad pravis novi objekat (instancu objekta) setujes mu vrednosti ovako:

$menusObj = new Menu();
$menusObj->setProperties($_POST); //setuje sve vrednosti koje objekt poseduje, a nalaze se u postu ili bilo kom nizu (veoooma korisno kod velikih formi)
$menusObj->setProperty('is_active', getPOST('is_active', 0)); ///setuje pojedinacni property

i onda snimanje u bazu izgleda ovako:

$menusTransObj->store();

Kad ga editujes, izgleda prilicno isto:


$menusObj = new Menu();
$menusObj->get($menuId); //iz baze se izvade vec njegove sve vrednosti, tj uradi se select where id = $menuId
$menusObj->setProperties($_POST); //setuje sve vrednosti koje objekt poseduje, a nalaze se u postu
$menusObj->setProperty('is_active', getPOST('is_active', 0)); ///setuje pojedinacni property

i onda snimanje u bazu izgleda opet ovako:

$menusTransObj->store();

Objekat zna da li je iniciran "na prazno" tj da li je upravo kriran ili je get()-om izvucen iz baze pa prema tome bira koji ce sql da koristi.

Brisanje objekta izgleda ovako:

$menusObj->get($menuId);
$menusObj->delete();

Prednost je recimo sto ce se svaki property pobrinuti oko brisanja sopstvenih elemenata ukoliko su dodatni (brisanje sopstvenih slika i fajlova recimo)

kad ti treba neki property objekta, to je

$vrednost = $menusObj->getProperty('is_active');

Sve ove metode se same brinu oko toga da li su required, kog su tipa, kako se validiraju, kako se obradjuju pri unosu i pri citanju iz baze itd.

Crtanje forme za editovanje i kreiranje moze da izgleda ovako:

$smarty->assign('formElements', $menusObj->drawFormElements());

Gde ce svaki property u zavsnosti od sopstvenog tipa vratiti odgovarajuci element u formi.
Postoji i opcija za pretragu, pravljenjem kriterija objekta, na slicnu foru.

Paginacija se uz pomoc ovakvu unapred poznatu strukturu i metode objekta pravi recimo:

$pagin = new Pagin();
$itemsObj = $pagin->createPagin($itemsObj, $criteria, 'user_per_page', $config['products_per_page']);

i paginacija ce sama da pozove metode getObjects, kao i countObjects na osnovu $criteria objekta koji sadrzi pravila za formiranje sql upita i da kreira sve potrebne parametre. Ako treba nesto posebno da joj se setuje, dopise se nova metoda.

I sad najbolji deo: ovaj kod je potpuno identican (osim naravno kreiranja samog objekta) za bilokoj tip podataka koje skladistis u bazi. Useri, Proizvodi, kategorije, oglasi, vesti, baneri, galerije, sta god ide i cita se iz baze (cak i ne mora iz baze, prosiris metodom koja ti treba). Ako pak neki entitet u bazi ima poseban zahtev za recimo Store metodom, samo je napises u nasledjenoj klasi.
Posle nekog vremena upotrebe, sky is the limit ;)

Da ne spominjem ustedu vremena u pisanju 20-30 linija koda za kompletnu administraciju celog dela sajta sa svim procedurama unosa/editovanja/brisanja...
Kasnije samo uzmes kopiras ceo admin fajl, i samo find-replace Menu with User.

Credits kolegama Bati i Malisi koji su inicirali i podelili ideje, sad dal je ovo neki standard, ne znam.
 
Odgovor na temu

[es] :: PHP :: Videla zaba da se konji potkivaju...ili kako uci u svet OOP???

[ Pregleda: 2362 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.