|
[ alfa-pro @ 14.04.2010. 16:06 ] @
| Zanima me da li je neko imao problema kada je poceo sa php-om a pre toga nije radio ni sa jednim
drugim programskim jezikom.
Eto prica jednog drugara on je decko naucio sve ucio i radio uporedo sve primere iz knjige na racunaru tipa
Promenljive
Konstante
Upotreba operatora
Petlje while, do while, for, foreach
If, Else, Elseif
Strukturu declare
Snimanje ucitavanje podataka fopen() itd..
Upotreba nizova
Rad sa znakovnim vrednostima i regularnim izrazima
Pisanje funkcija
Objektno orjentisani PHP
Rad sa MySql
itd itd itd
Znaci dosta toga bas dosta par knjiga prevrnuo i php manuel funkcije ...
Ali npr da napravi decko nesto to nema sanse...
Nezna kako da pocne bilo sta da krene da uradi???
Neznam da li ste i vi dok ste ucili imali problema sa tim ili ste imali neku svoji nacin na koji krecete sa radom pa sam mislio da bi bilo dobro da se postave druga iskustva...
Neki taj sam pocetak dok se ne probije led...
|
[ ColdKeyboard @ 14.04.2010. 16:17 ] @
Ja hvala Bogu nikada nisam imao takvih problema. Ucio sam PHP iz online manual-a i eventualno koji tutorial na netu sto nadjem.
Realno dzaba mu sto je sve te knjige presao (nastrebao) kada on nista od toga ne zna da primjeni.
Nije poenta da on to nauci sve napamet nego da nauci sta sve od funkcija postoji, kada se koja koristi,
neke osnovne sablone kako se sta radi a poslije toga je sve stvar maste i kreativnosti.
[ squirll @ 14.04.2010. 16:18 ] @
jedno je teorija drugo je praksa...bez teorije mozes bez prakse ne mozes ;)
ili ne zeli da se pomuci da napravi nesto(svaki pocetak je tezak) ili ono sto je procitalo nije mu ostalo u glavi....
[ Goran Rakić @ 14.04.2010. 17:23 ] @
A šta bi to on hteo da napravi? Navedi par neuspelih pokušaja.
[ alfa-pro @ 14.04.2010. 18:29 ] @
pa otkud znam sta god da je bilo neide ne moze taj pocetak uvek...
Pa bilo je tu pokusaja tipa knjige utisaka, galerije, npr pravljenje albuma u galerijama itd. ne znam stvarno sta vise za to sam samo cuo a verujem da je bilo jos toga....
[ Milos911 @ 14.04.2010. 18:39 ] @
Ako je samo pocetak problem(a zna teoriju), evo mu pocetak:
Code: <?php
echo "Ovo je knjiga utisaka:";
//ovde izvuci iz baze sve utiske koji su upisani. Pre toga napravi tabelu i unesi par utisaka
?>
Evo, ako je toliko upoznat sa teorijom, ovo uopste ne bi trebalo da mu bude tesko. Ako ne ume ovo da uradi, neka kaze konkretno sta mu nije jasno pa cemo mu pomoci. Ako ne zna sta mu nije jasno onda neka prestane da se trudi da nauci php...
[ ColdKeyboard @ 14.04.2010. 19:11 ] @
Vrlo lako moguce da je on procitao te knjige ali da nista razumio nije... Tako isto moze uzeti i brdo kineske literature citati i prekucavati ono sto tamo pise ali dzaba kada nista ne razujime...
Ono sto ucis moras uciti sa razumjevanjem jer u protivnom dzaba trosis vrijeme, kad tad ti se vrati nazad.
[ AMD guy @ 14.04.2010. 19:50 ] @
Jel uopste instalirao PHP i(ili) Mysql?
Postoje i gotovi paketi da se ne muci sa instalacijom http://www.wampserver.com/en/
[ alfa-pro @ 14.04.2010. 21:23 ] @
ima wamp instaliran..
ma ok to je prosto sa bazom prikazi tabele najosnovnije nesto za rad sa SQL-om SELECT, INSERT, UPDATE, DELITE ITD...
Evo nesto tipa na stranici files kada kliknes na link da izlista sve fajlove iz root foldera...
Eto nesto bzv. kako poceti?
sta prvo odraditi
[ AMD guy @ 14.04.2010. 21:33 ] @
Google Php list files in directory
Pretrazuj forume, blogove trazi tutorijale kako se sta radi itd ...
[ Goran Rakić @ 14.04.2010. 22:02 ] @
Citat: alfa-pro:
ma ok to je prosto sa bazom prikazi tabele najosnovnije nesto za rad sa SQL-om...
Evo nesto tipa na stranici files kada kliknes na link da izlista sve fajlove iz root foldera...
Neka uradi prvo to jednostavno, najosnovije. Ne vidim u čemu je tačno problem? Slikar kada uradi svoje prve crteže ne pravi od toga odmah izložbu.
Kada sam počinjao pravio sam sajt za vesti o igricama sa komentarima, kasnije dodao anketu, listu slanja (engl. newsletter), preuzimanja, povezao to sve sa gotovim forumom... dosta toga naučio. Neka počne nešto sebi da pravi, na temu koja ga interesuje i onda korak po korak učiće se standardnoj praksi. Ne preporučujem čitanje samo vodiča uz kopiranje blokova koda, tako ništa neće naučiti.
[ dragancesu @ 14.04.2010. 23:06 ] @
Neka kupi drugu knjigu. Kad procita trecu bice lakse... recimo http://www.mikroknjiga.rs/store/prikaz.php?ref=978-86-7555-340-3
PHP je samo alat, ako nema ideje nista.Ali ima mnogo soursa da se skine i pogleda i vidi kako se to radi.
[ alfa-pro @ 15.04.2010. 01:59 ] @
ta knjiga je vrh ja sam je pre 6 meseci kupio i stvarno je full samo st steta sto jako malo ima OO u njoj bas malo...
[ vatri @ 15.04.2010. 07:18 ] @
Mi smo recimo u srednjoj skoli radili Pascal, Basic, C, C++ i tu smo imali jednostavne primjere kao npr. ispisi prvih 50 prirodnih brojeva. Naravno ja to u pocetku nisam znao uraditi jer nisam poznavao logiku programiranja ( komande sam donekle znao - while, foreach).
Mislim da je u programiranju najvaznije da naucis logicki razmisljat i izradjivat algoritme za rjesenje nekog "problema". Kada to naucis, ali bas naucis, mislim da samo ucenje nekog odredjenog prog. jezika nije problem. Samo naucis sintaksu, funkcije i ostalo, sta se valjda stice iskustvom.
Ja to nisam na vrijeme shvatao, pa sam odlazio sa casova programiranja, posto smo crtali zvijezdice u konzoli, pisali parne, neparne, prirodne i neprirodne brojeve :) A kasnije kada je dosao Delphi i GUI aplikacije, tada nisam propustao casove, nema sanse :). Sada mi je zao, sto nije bilo obrnuto.
Eto toliko od mene i mog iskustva.
[ dakipro @ 15.04.2010. 07:27 ] @
Neka proba recimo da procita o fuze-in-box nacinu organizovanja fajlova i logike, pa ce poceti da ima predstavu kako treba da nastavi dalje. Za pocetak napravi listu nekih proizvoda recimo, pa onda formu za dodavanje, pa formu za izmenu tih proizvoda, pa neka krene nesto konkretnije da radi. Takodje neka prouci neke od gotovih open source aplikacija, kolko da vidi kako se to ustvari radi, posle ce sve samo da se nadovezuje samo.
[ sheky @ 15.04.2010. 09:33 ] @
Slažem se sa predhodnim komentarima o algoritmima i logici programiranja. Ja sam imao sreće da sam u gimnaziji imao perfektnog profesora za ovo i da je uspeo (iako je materija suvoparna) da nam to približi. Tako puno jasnije znaš šta hoćeš, jasno uviđaš suštinske razlike u raznim jezicima (njihove stvarne funkcionalnosti) a sintaksu malte ne ni nemora da zna - to dođe vremenom. Meni se čini da se je tvoj prijatelj ubio od učenja sintakse - onog što ja ni posle godina programiranja ne znam napamet - ali imam ideju za samo programiranje zbog onog osnovnog.
pozz
[ mitke013 @ 15.04.2010. 12:37 ] @
Preporucio bih tvom drugaru da prvo nauci Smarty ili neki slican template engine. Za njega je potrebno svega par sati, ali ce ga to naterati da razdvoji logiku od prezentacije. Tako je mnogo lakse raditi jer ce mu fokus biti na programiranju, a za dizajn moze i neko drugi da se brine. Da ne pricam koliko je kod pregledniji kad sve to lepo razdvojis.
Ubrzani kurs bi jos ukljucio i koriscenje nekog ORM-a; ja koristim Doctrine i prezadovoljan sam, ali sam citao o novoj verziji Propel-a i dosta obecava. ORM se sam brine o vadjenju podataka iz baze, validaciji, SQL injection-u ... i brdu drugih stvari, sto mnogo olaksava rad. Uputstvo za Doctrine je veoma detaljno i potrebno je dan-dva dok ne pocne da ga koristi.
Nek radi proceduralno dok ne dostigne neki ozbiljniji nivo; za OOP ipak treba mnogo vremena a ni tutorial-i na netu nisu preterano korisni. Vecina programera radi tako sto potrpa gomilu funkcija u neku klasu i nazove to OOP-om; totalno pogresan pristup i (po meni) jedino uz mnogo vezbe ce sam zakljuciti kako se OOP pravilno koristi.
[ Radovan__III @ 15.04.2010. 12:48 ] @
Citat: mitke013: Preporucio bih tvom drugaru da prvo nauci Smarty ili neki slican template engine. Za njega je potrebno svega par sati, ali ce ga to naterati da razdvoji logiku od prezentacije. Tako je mnogo lakse raditi jer ce mu fokus biti na programiranju, a za dizajn moze i neko drugi da se brine. Da ne pricam koliko je kod pregledniji kad sve to lepo razdvojis.
Ubrzani kurs bi jos ukljucio i koriscenje nekog ORM-a; ja koristim Doctrine i prezadovoljan sam, ali sam citao o novoj verziji Propel-a i dosta obecava. ORM se sam brine o vadjenju podataka iz baze, validaciji, SQL injection-u ... i brdu drugih stvari, sto mnogo olaksava rad. Uputstvo za Doctrine je veoma detaljno i potrebno je dan-dva dok ne pocne da ga koristi.
Nek radi proceduralno dok ne dostigne neki ozbiljniji nivo; za OOP ipak treba mnogo vremena a ni tutorial-i na netu nisu preterano korisni. Vecina programera radi tako sto potrpa gomilu funkcija u neku klasu i nazove to OOP-om; totalno pogresan pristup i (po meni) jedino uz mnogo vezbe ce sam zakljuciti kako se OOP pravilno koristi.
Dobro ga savetujes ali sumljam da je on ni blizu tom nivou, po mom misljenju ako on jos nije u mogucnosti da napravi nesto tipa najednostavnijeg blog-a ili slicno nema potrebe da uopste krece sa ovim stvarima.
[ Goran Rakić @ 15.04.2010. 13:04 ] @
Citat: mitke013: Nek radi proceduralno dok ne dostigne neki ozbiljniji nivo; za OOP ipak treba mnogo vremena a ni tutorial-i na netu nisu preterano korisni. Vecina programera radi tako sto potrpa gomilu funkcija u neku klasu i nazove to OOP-om; totalno pogresan pristup i (po meni) jedino uz mnogo vezbe ce sam zakljuciti kako se OOP pravilno koristi.
Kada bi znao ograničenja PHP-a korišćenog iza web servera bez nekog sistema za čuvanje stanja aplikacije između zahteva (npr. memcached) ne bi bio tako isključiv. Da bi napredovao dalje moraš da proširiš svoje vidike. OOP je zapravo jednostavniji koncept, problem je što programeri uglavnom prvo počnu sa proceduralnim programiranjem. Nemoj misliti da ako si savladao Doctrine/Smarty ne postoji ništa drugo.
[ mitke013 @ 15.04.2010. 13:30 ] @
Citat: Goran Rakić: Kada bi znao ograničenja PHP-a korišćenog iza web servera bez nekog sistema za čuvanje stanja aplikacije između zahteva (npr. memcached) ne bi bio tako isključiv. Da bi napredovao dalje moraš da proširiš svoje vidike. OOP je zapravo jednostavniji koncept, problem je što programeri uglavnom prvo počnu sa proceduralnim programiranjem. Nemoj misliti da ako si savladao Doctrine/Smarty ne postoji ništa drugo.
Ne pratim; ako pricas o kesiranju, Doctrine ima odlicnu dokumentaciju na tu temu. Jel na to mislis?
Doctrine i Smarty su prilicno jednostavni da se nauce; zaista sam ubedjen da vredi odvojiti par dana da se nauci njihov API; to mogu biti i neki drugi ORM i drugi template engine, bitna je poenta da ce ti programi mnogo olaksati posao.
Ne bih se slozio da je OOP jednostavniji koncept; skini tzv. oop programe poput Ajax explorer-a, Openrealty i slicne pa ces se i sam uveriti koliko je to ljudima velik problem. Sa time se najvise borim kad dobijem posao a vlasnik me ubedjuje kako je stari program pisan OOP; nagledao sam se svakakvih cudesa, najbolji primer je kad je programer kreirao klase (bez ikakvog nasledjivanja) gde je svaka metoda imala samo ispis html-a. I to promenljivom :(
Naravno sve je proceduralno i konstantno se ponavlja isti kod, od klase do klase. A OOP je i izmisljen da bi se to sprecilo.
[ SpLaSh89 @ 15.04.2010. 13:37 ] @
Moja preporuka ti je da pocne prvo sa izmenama postojecih skripti. Neka prilagodajva vec izragdjene svojim potrebama. Tako ces kroz tudje kodove ukapirati i kako da napise svoje :)
[ Man-Wolf @ 15.04.2010. 13:56 ] @
@mitke013 - Bez uvrede, ali cini mi se da ti bas ne shvatas ideju OOP-a ?
Inace, ideje da covek odmah pocne da proucava Smarty/Frameworke, apsolutno ne piju vodu (bar po pom misljenju). On treba da shvati osnovne principe, da nauci i razume kako sve to radi "ispod haube", etc. Takodje, kao sto rece @vatri - bitno je da nauci da razmislja.
Enivej, reci ti tom tvom ortaku da jednostavno sedne i da krene da pravi nesto - sta god to bilo .... Nek krene da pravi Blog svoj jednostavno :-)
Kako da pocne ?
Code (php):
<?php
// ....
Lepo je sto je on procitao dve tone knjiga, al, praksa je nesto drugo ;)
Pozdrav !
[ mitke013 @ 15.04.2010. 14:12 ] @
Citat: Man-Wolf: @mitke013 - Bez uvrede, ali cini mi se da ti bas ne shvatas ideju OOP-a ?
Nema ljutnje, covek se uci dok je ziv. Kako ti zamisljas OOP? Moje vidjenje sam opisao ovde, pogledaj pa mi reci gde gresim.
[ deerbeer @ 15.04.2010. 14:46 ] @
Ne gresis . Samo sto je OOP malo vise od predstavljanja realnog sveta pomocu klasa i objekata ,
a to je kakve veze treba da postoje izmedju objekata , i kako ih grupises i sastavljas radi lakseg odrzavanja ,
bolje citljivosti koda i sto lakseg prosirivanja .
http://en.wikipedia.org/wiki/Design_Patterns
[ mitke013 @ 15.04.2010. 15:07 ] @
Citat: deerbeer: Ne gresis . Samo sto je OOP malo vise od predstavljanja realnog sveta pomocu klasa i objekata ,
a to je kakve veze treba da postoje izmedju objekata , i kako ih grupises i sastavljas radi lakseg odrzavanja ,
bolje citljivosti koda i sto lakseg prosirivanja .
http://en.wikipedia.org/wiki/Design_Patterns
Kako drugacije pocetniku koja ne zna nista o OOP-u predstaviti logiku rada, ako je ne uporedis sa realnim svetom? Znam kakvih sam ja problema imao; MVC, design pattern itd... nisu nikakav problem kad naucis OOP. Jos lakse; uskoci u neki framework i vozi Misko.
Najveci broj OOP tutorial-a je imao nesto poput klasa Animal, pa klase Dog i Cat nasledjuju Animal. Doooobro, i sta sa tim? 20 redova teksta zaista mi nije bilo dovoljno da ukapiram prednosti OOP-a.
U onom mom uputstvu sam i naveo primere zasto ne treba slati parametre metodama; ja to nigde nisam nasao, morao sam sam da zakljucim.
[ ksrele @ 15.04.2010. 16:32 ] @
Ajd sto se tice neke desktop aplikacije ja i kontam zasto bi koristio klase, recimo pravim igricu gde ima puno elemenata na "sceni" koji imaju iste osobine samo sa drugacijim vrednostima, to je jedna klasa sa vise instanci. Zatim ako zelim da u ugru ubacim neki bolji element samo napravim klasu koja nasledjuje osnovne osobine prvog elementa ali dodaje neke svoje. Ovo em sto olaksava programiranje em je mnogo bolje sto se iskoriscenja memorije tice.
Naravno, tipicni primeri vozila -> automobil, kamion, traktor... itd
Sve je to cool za neku desktop aplikaciju, ali za web sajt mi to nikako ne ide u glavu zasto?
Recimo, ja pravim sajt za e-kupovinu, zasto ja moram korpu da napravim kao klasu? Zasto jednostavno ne napravim nekoliko funckija:
Code:
function insert_in_basket($who, $what, $how_much)
{
$SQL = "INSERT INTO `basket` (`user`,`article`,`q`) VALUES ('$who', '$what', '$how_much')";
....
}
function get_articles_from_basket($who)
{
$SQL = "SELECT `article`,`q` FROM `basket` WHERE `user` = '$who')";
return $result
}
I ajde neka mi neko objasni sta ce mi ovde klasa?
[ Man-Wolf @ 15.04.2010. 17:06 ] @
@ksrele - Vidis druze, PHP nekad nije bio objektno orijentisan i sve je radjeno u proceduralnom stilu, tako da - tebe niko ne tera da ti koristis OOP, al, kad ga dobro razumes i shvatis njegovu primenu onda ce ti mnogo prirodnije i lakse biti da tako razmisljas ;)
@mitke013 - Malo si se losije izrazio u postu pre mog prethodnog komentara, zato sam ti rekao :-) Uglavnom, odgovoricu ti detaljnije malo kasnije, u guzvi sam sad malo ;)
[ Goran Rakić @ 15.04.2010. 17:46 ] @
Meni se ne dopada to tumačenje da napredni programeri koriste objektno-orijentisano programiranje, a početnici rade proceduralnom paradigmom. Takođe se ne slažem sa ocenom kako je OOP savršeno rešenje i u svakoj primeni sjajna stvar.
U nekoj drugoj tehnologiji ne bi svaki zahtev počinjao od nule pa bi mogao da imaš n objekata korpe smeštenih u memoriju tokom trajanja sesije. Svaki korisnik onda ima svoju korpu i u nju može da dodaje i iz nje vadi artikle. U PHP-u to nema puno smisla. Generalno većina klasa u veb aplikacijama izrađenim u PHP-u ima samo po jednu instancu pa prednost enkapsulacije podataka u neku ruku nestaje, a i polimorfizam se retko sreće. Preostaje nasleđivanje koje se obično koristi kao sintaksički dekorator.
Programiranje vođeno događajem uglavnom bolje odgovara dizajnu današanjih veb aplikacija (u PHP-u izraženo kroz dominantno korišćenje Controller obrasca).
[ jablan @ 15.04.2010. 18:07 ] @
Citat: Goran Rakić: Generalno većina klasa u veb aplikacijama izrađenim u PHP-u ima samo po jednu instancu pa prednost enkapsulacije podataka u neku ruku nestaje, a i polimorfizam se retko sreće.
Ček, šta je npr. sa tzv. biznis objektima, na primer proizvodi koje korisnik meće u korpu? Nisu li oni idealni kandidati za instance?
BTW, neko je negde pitao kako da nauči OOP. Ja sam mu preporučio da nauči jedan čisti OO jezik i da ga koristi neko vreme. Uspeh zagarantovan. ;)
[ Goran Rakić @ 15.04.2010. 18:23 ] @
U pravu si, mada uglavnom nisu iz prostog razloga što ih uglavnom čuvaš u relacionoj, a ne u objektnoj bazi podataka. Pretvaranjem se gubi previše performansi a objekti retko imaju interakciju složeniju od standardnih CRUD operacija. PHP-ovi odlični asocijativni nizovi omogućavaju lepo pakovanje podataka kao alternativa.
U ostalim slučajevima mysqli_result::fetch_object() je zgodno rešenje.
[ jablan @ 15.04.2010. 19:33 ] @
Citat: Goran Rakić: U pravu si, mada uglavnom nisu iz prostog razloga što ih uglavnom čuvaš u relacionoj, a ne u objektnoj bazi podataka.
Ne vidim nikakvu vezu između toga u kakvoj bazi držiš podatke i kako ih posmatraš u aplikaciji.
Citat: Pretvaranjem se gubi previše performansi a objekti retko imaju interakciju složeniju od standardnih CRUD operacija.
Ne vidim zašto bi se gubile performanse. Ti objektom možeš komotno da wrapuješ asocijativni niz ili šta-ti-već vraća DB sloj, bez ikakvog pretvaranja. Na kraju krajeva, ja sam govorio uopšteno, nevezano čak ni za PHP, a pogotovu ne za paket funkcija za rad sa bazama koji "dobiješ" uz PHP.
Ali ok, kontam da je PHP i nastao bez neke objektne vizije i da je OOP dodat usled pritiska jednog dela zajednice, tako da se slažem da OOP nije nikakav silver bullet za PHP aplikacije. Ali ipak nije istina da u njima za OOP nema mesta.
[ vatri @ 15.04.2010. 19:37 ] @
Mislim da previse generalizujete stvari. To je kao ona prica PHP vs. Java i slicne. Na kraju krajeva samo kodiranje aplikacije ( bilo web, bilo desktop ), oduzima manje od 50% vremena ( uglavnom ). Treba se odluciti za tehnicke stvari, tek nakon analize projekta.
Mozda je mali "off topic" ali sam samo htio skrenuti paznju, ne zamjerite :)
A inace rasprava mi se svidja i bilo bi dobro da se ovo prebaci u zasebnu temu!
edit: evo na primjer ovaj 'thread' je neaktivan vec 3 i po godine
http://www.elitesecurity.org/t...tite-li-PHP-OOP-Zend-Framework
[ mitke013 @ 15.04.2010. 20:16 ] @
Citat: ksrele:
function insert_in_basket($who, $what, $how_much)
{
$SQL = "INSERT INTO `basket` (`user`,`article`,`q`) VALUES ('$who', '$what', '$how_much')";
....
}
function get_articles_from_basket($who)
{
$SQL = "SELECT `article`,`q` FROM `basket` WHERE `user` = '$who')";
return $result
}
[/code]
I ajde neka mi neko objasni sta ce mi ovde klasa?
Evo probacu ja; tvoj glavni program ce na osnovu URL-a da pozove neki tzv. modul. Posto Zend i Symfony to zovu action, i ja cu. Imaj na umu da je ovo iz glave i samo primer.
Znaci, korisnik je kliknuo na link: site.com/viewBasket.html . Kontrolor pozove action (ili modul) klasu pod imenom viewBasket i metodu index()
Code:
class viewBasket extends BaseClass
{
public function index()
{
$this->assign( 'allProducts', Basket::getAll() ) ;
}
}
I to je to. Pritom tebe nimalo ne zanima kako ce to klasa Basket da uradi; da li ce izvuci iz $_SESSION-a, $_COOKIE-a ili iz baze... Nije bitno. Poenta je da jednom linijom imas sve sto ti treba sto je mnogo preglednije.
Vratimo se na pricu; kontroler je pozvao ovu metodu, metoda je uradila assign svih proizvoda i nakon toga kontroler uradi display fajla 'viewBasket/index.tpl' koji bi bio nesto poput:
Code:
{foreach from=$allProducts item=product}
Ime: {$product->getName()}
{/foreach}
Al zamisli sledecu situaciju; jednog dana hoces da ti sajt bude u vise jezika. Tada ti u tabeli products nece biti imena, vec ces koristiti neku many2many tabelu gde bi polja bila 'language_id' , 'product_id' i 'name'. Sta je poenta? Tebi ce i dalje .tpl fajlovi SVUDA da rade zato sto koristis metodu getName(). Jedino sto je potrebno jeste da izmenis tu metodu koja vise nece vracati sadrzaj kolone 'name' (jer je vise nema), vec na osnovu odabranog jezika da izvuce ime iz te many2many tabele.
Sta se desava kad korisnik hoce da doda nesto u korpu? Recimo da je link site.com/viewBasket/add/12.html . Kontroler pozove klasu viewBasket::add(12) , gde je 12 id proizvoda.
Code:
class viewBasket extends BaseClass
{
public function add($id)
{
Basket::add($id) ;
$this->assign( 'allProducts', Basket::getAll() ) ;
}
}
Opet; tebe ne zanima kako ce to metoda da uradi. Klasa Basket ce da upise u bazu, $_SESSION.... nebitno. Nadam se da me razumes sad.
Kako to konkretno ja radim? SVE klase nasledjuju klasu koja se zove BaseModel. Ona ima metodu getName() i koja izgleda ovako:
Code:
public function getName()
{
return $this->hasRelation('Language') ? $this->getTranslatedField('name') : $this->name ;
}
Metoda getTranslatedField() je malo ruznjikavo napisana pa je necu postovati dok je ne sredim. Elem; ako objekat ima relaciju sa Language klasom, znaci da je ime tog objekta u vise jezika. Tada se poziva getTranslatedField(). Ako nema relaciju, onda samo vrati sadrzaj kolone 'name'. Tako sam na samo jednom mestu sredio visejezicku podrsku. Ako te zanima kako taj program radi u praksi, posalji mi PM i dacu ti linkove podatke za login.
Jos nesto; sta dobijas nasledjivanjem? Pogledaj ovaj video ; ako pravilno postavis te action klase, dovoljno ti samo linija-dve da uradis prikaze forme, validaciju, obelezavanje gresaka itd. Evo kako jedna moja action klasa izgleda:
Code:
class BannerManager extends AdminManager
{
public function index($page=1)
{
$dql = Doctrine_Query::create()->from('Banner b')->orderBy('b.updated_at DESC') ;
$this->assign('allObjects', parent::setPagination($dql, $page)) ;
}
public function add()
{
$this->assign( 'object', parent::add(new Banner()) ) ;
}
public function edit($id, $page=1)
{
$this->assign('page', $page) ;
$this->assign( 'object', parent::edit(Banner::getById($id)) ) ;
}
public function delete($id)
{
$this->assign( 'object', parent::delete(Banner::getById($id)) ) ;
}
}
Ovo je deo iz administracije programa koji sad radim. SVE te action klase su skoro identicne; jedino sto umesto Banner::getById($id) imas Events::getById($id) kod izmene eventa, User::getById($id) kod izmene korisnika itd. Znaci cist copy&paste i za par minuta si dobio prikaz, izmenu i dodavanje neke nove klase/tabele. Kod izuzetno cist, pregledan i lako se upgrade-uje.
Uf.... izvini sto je zbrda-zdola napisano, nadam se da si ukapirao poentu.
[ mitke013 @ 15.04.2010. 20:38 ] @
Dodatak na prethodnu poruku:
BaseModel klasa ima i sledecu metodu:
Code:
public function save()
{
parent::save() ;
if ($this->hasRelation('Image')){
foreach ($this->getImages() as $image)
$image->rename($this->slug) ;
}
}
Sta ona radi? Ako objekat ima relaciju sa slikama (Image klasa), onda ce sve slike koje pripadaju tom objektu biti preimenovane. Primer; imas klasu Article koja je u relaciji sa Image klasom. Kolonu 'slug' Doctrine sam generise i to se koristi za SEO linkove mada nije problem ni da sam napises takvu funkcionalnost.
Npr. Article ima kolonu 'title', a ti dodas clanak ciji je title 'Vanzemaljci napravili bosanske piramide': slug kolona automatski postaje 'vanzemaljci-napravili-bosanske-piramide'.
Dodao si par slika cija su imena 'trt-mrt.jpg', 'piramida.jpg' i '2134jksda.jpg'. Kad snimis taj clanak, gornja metoda ce preimenovati sve slike vezane za taj clanak u:
'vanzemaljci-napravili-bosanske-piramide.jpg'
'vanzemaljci-napravili-bosanske-piramide-1.jpg'
'vanzemaljci-napravili-bosanske-piramide-2.jpg'
itd. sto google mnogo voli.
Izmenio si title? Nema problema, metoda save() ce opet naterati sve slike da se preimenuju.
Image klasa ima (izmedju ostalog) kolonu 'filename' u kojoj se drzi ime fajla. rename($newName) ce prvo preimenovati fajl u slobodan naziv (kako ne bi doslo do prebrisavanja), update-ovati kolonu filename i snimiti sebe. Tj:
Code:
public function rename($slug)
{
$fullname = $this->filename ;
$fullname = explode('.', $fullname) ;
$name = $fullname[0] ;
$extension = $fullname[1] ;
if ($name==$slug)
return true ;
$imageName = ROOT . $this->getImageFilename() ;
$thumbName = ROOT . $this->getThumbFilename() ;
$counter = 0 ;
while( !Image::isAvailable($newname = $slug . ( $counter == 0 ? '' : '-' . $counter ). '.' . $extension) ){
$counter ++ ;
}
rename($imageName, $this->getImageDirectory() . '/' . $newname ) ;
rename($thumbName, $this->getImageDirectory() . '/thumbs/' . $newname ) ;
$this->filename = $newname ;
return parent::save() ;
}
[ VladaSu @ 15.04.2010. 20:45 ] @
@mitke013
Video sam tvoj primer za OOP, odgovarao si na moje pitanje.
Znam sta je OOP i koje su njegove mogucnosti ali nesto nisam naisao na neku primenu u php-u.
Konkretniju primenu sam video recimo u c#.
U PHP-u sam video kada su zeleli da postignu neku fleksibilnost u kodovima koji se masovno prodaju.
Meni je mnogo lakse kada radim neki sajt za jednog klijenta da prepravim postojecu funkciju a ne da nasledjujem klase i prepisujem metodu ili tako nesto.
Jednostavno nisam video neku pravu primenu. U javascript sam video lepe primene klasa.
Bas sada radim na kodu koji je sav u klasama i radjen, da tako kazem, po "vrh" pravilima, klase modeli xml itd ali taj kod se vuce na dedicated serveru sa 2 procesora i 4gb rama (generise stranicu 10-15 sekundi i CPU 100% zakucan.
Nasuprot tome imam sajt slicnih mogucnosti sem sto nije toliko fleksibilan po pitanju upgrade i sajt radi sa 50 puta manje potreba.
[ ksrele @ 15.04.2010. 21:01 ] @
@mitke013
Ufff druze... ako si mislio da meni sve ovo objasnis malo je ovo previse za mene. Ja koristim samo i iskljucivo cisti PHP, bez ikakvih dodataka. Za pisanje koda koristim sta stignem, kako kad, nekad NuSphere (on je dobar kada radim cisti PHP), cesce DreamWeaver CS4 (on je idealan za HTML) a u mnogo slucajeva i obican, najobicniji Notepad2 (iz TotalCommander-a) jedino sto eto ima hightlighting coda u nojama a bez ikakvih dopunjavanja koda.
Meni je ovako sasvim OK.
Razmisljao sam ja da napravim sebi neke klasice koje bi samo ugradjivao u kod i koje bi mi odradjivale posao ali nisam nesto nasao pravi primer za to.... ako citam iz baze uvek na neki poseban nacin citam. Od 10 upita u bazu svaki je skroz prica za sebe. Negde imam 16 uslova, negde ni jedan, negde spajam 2,3 tabele u jedan JOIN i sta ti ja znam... tako da bi se namucio ko shaban da prvo napravim tu klasu a posle svaki put kada je koristim lupao bih glavu kako ono ide skraceni nacin povezivanja 2, 3 tabele, kako ono unosim uslove, dal ih odvajam zarezom ili pipe-om... pa ludilo.
Mozda jedina korisna klasa bi mi mogla biti klasa head, gde samo napisem:
Code:
$head->setEnc("utf-8");
$head->setTitle($naslov);
$head->addDescrpt("moj sajt","samo moj sajt","ja sam najsebicniji na svetu");
.
.
.
$head->DoTheJob();
A ove doktrine (ili sta je vec) pa neki Zend Frameworkovi... nemam pojma... dosta mi je .NET Frameworkova ne znam vise koja mi aplikacija trazi koji... :)
Salim se ja naravno, to sto ja to ne koristim i ne znam kako se koristi je moj problem i zaista ne smatram da je to losa stvar, naprotiv, dok toliko dobrih developera koristi te "alate" (ne znam kako da ih nazovem) SIGURNO valjaju i ko sam ja ta kazem "e pa ne valjaju i ne treba da se koriste".
Evo da vam docaram kakav sam ja po tom pitanju, ja sam naucio kako se koristi Smarty, napravio sam par sajtova sa njim ali mi JAAAAAAKO ide na zivac i totalno mi je nepotrebna stvar.
Ja kazem da nije nikakav problem da ja napravim dva PHP fajla:
1. index.php
Code:
<?php
$neka_promenjiva_ili_niz = "nesto iz baze... bla bla bla da ne pisem sada kod, svima je jasno";
include('index_design.php');
?>
2. index_design.php
Code:
<HTML>
<HEAD>
</HEAD>
<BODY>
<div> <?php=$neka_promenjiva_ili_niz[0]?> </div>
</BODY>
</HTML>
E ja sam vam veliki zagovornik da je Smarty nepotreban za ovakve intervencije. Doduse mozda je malo pametniji kada je rec o necem komplikovanijem ali... kad cemo koristi nesto extra komplikovano sto se ne mze resiti na ovako elegantan fazon sa sirovim PHP-om?
No, naucicu jos sve ove nove 'alate' pa cu ih mozda i koristiti.
E da, jos jedna stvar, pa ako ja napravim funkciju sa unos artikala u bazu i ja toj funkciji dodajem samo ID proizvoda, ID user-a i kolicinu proizvoda (i pri tom to radim preko AJAX-a) zasto ja moram da imam problema sa tim sta je u toj funkciji? Isto kao i ti sa klasom, kada ja zelim nesto da menjam oko citanja, dal se sada tabela zove drugacije ili se spaja fise tabela, i ti ja moramo da editujemo neki PHP file, zar je bitno koji file se edituje? Da li je moja izmena funkcije drugacija od tvoje izmene metode klase? U oba slucaja se iz direktnog koda ne vidi kako radi funkcija koja je u zasebnom file-u.
[ mitke013 @ 15.04.2010. 21:20 ] @
Citat: ksrele: @mitke013
Code:
$head->setEnc("utf-8");
$head->setTitle($naslov);
$head->addDescrpt("moj sajt","samo moj sajt","ja sam najsebicniji na svetu");
.
.
.
$head->DoTheJob();
Evo kako bih ja to uradio na tvom mestu:
Code:
class Page
{
// ovde ide definicija za svaku stranicu; konkretno, definises polja title, description i keywords... i metodu save() koja bi ta polja snimila u bazu
public function show()
{
echo '<title>' . $this->title '</title> ;
echo '<description>' . $this->title '</description> ;
echo '<keywords>' . $this->title '</keywords> ;
// ili kako vec idu ti tagovi, ne znam ih napamet
}
}
Poenta: svaka stranica ima svoje title itd tagove. Ucitas sadrzaj te stranice i samo uradis $page->show() (ili slicno) . Ne saljes parametre, metoda ce sama pobrine oko toga.
Citat:
<div> <?php=$neka_promenjiva_ili_niz[0]?> </div>
Na php.net mozes videti da se ne preporucuje koriscenje <?php= sintakse. Problem br.2 ; kako ces spreciti ubacivanje javascripte i html tagova? Tada gornja linija postaje
Code:
<?php echo htmlentities($nekaPromenljiva, 'utf-8', ENT_QUOTES);?>
nasuprot:
Code:
{nekaPromenljiva|escape}
Citat:
E da, jos jedna stvar, pa ako ja napravim funkciju sa unos artikala u bazu i ja toj funkciji dodajem samo ID proizvoda, ID user-a i kolicinu proizvoda (i pri tom to radim preko AJAX-a) zasto ja moram da imam problema sa tim sta je u toj funkciji? Isto kao i ti sa klasom, kada ja zelim nesto da menjam oko citanja, dal se sada tabela zove drugacije ili se spaja fise tabela, i ti ja moramo da editujemo neki PHP file, zar je bitno koji file se edituje? Da li je moja izmena funkcije drugacija od tvoje izmene metode klase? U oba slucaja se iz direktnog koda ne vidi kako radi funkcija koja je u zasebnom file-u.
Da, ovde si u pravu. Razlika je sto ce __autoload sam da ucita klasu npr. Basket i pozove metodu npr. Basket::add($id), dok bi proceduralno ti morao da pises 'require' za tako nesto. Takodje, u phped-u (i ostalim), jednim klikom ce program sam da 'skoci' na tu klasu.
Sa druge strane; proceduralno zahteva da funkcija ima neki parametar; sta se desi ako prosiris tu funkciju? Onda na svakom mestu gde se ta funkcija poziva, moras da proveris slanje parametara. Kod OOP-a, samo se metoda menja; neophodne parametre ce jako lako izvuci i sama.
[ mitke013 @ 15.04.2010. 21:28 ] @
Citat: VladaSu: @mitke013
Meni je mnogo lakse kada radim neki sajt za jednog klijenta da prepravim postojecu funkciju a ne da nasledjujem klase i prepisujem metodu ili tako nesto.
Jednostavno nisam video neku pravu primenu. U javascript sam video lepe primene klasa.
Bas sada radim na kodu koji je sav u klasama i radjen, da tako kazem, po "vrh" pravilima, klase modeli xml itd ali taj kod se vuce na dedicated serveru sa 2 procesora i 4gb rama (generise stranicu 10-15 sekundi i CPU 100% zakucan.
Nasuprot tome imam sajt slicnih mogucnosti sem sto nije toliko fleksibilan po pitanju upgrade i sajt radi sa 50 puta manje potreba.
100% sam ubedjen da tu nesto nije u redu sa programom ili serverom; apsolutno je nemoguce da OOP 50 puta uspori izvrsavanje programa. Pre nedelju-dve sam radio citanje tabele Wallpaper (oko 300) sa leftjoin svih slika (oko 3200), bez hidratacije (znaci instanca klase, ne niz podataka) i doctrine mi to vratio za manje od 200ms. A ja ne stedim na nasledjivanju:
class Wallpaper extends BaseWallpaper extends BaseModel extends Doctrine_Record extends itd... dalje nisam gledao.
[ alfa-pro @ 16.04.2010. 10:00 ] @
Jeste da idem sada u off topic ali da ne postavljam novo nesto... U vezi smary-ja
Downloadovao sam ga ubacio na server vidim ima demo verzija mislim ne kapiram je skroz
a dosta ljudi hvale i dosta su mi preporucili.Sta mogu sve sa njim da radim jel to ono bas pocetno temeljno
Ako moze par reci o smartiju cisto da znam o cemu je stvarno rec sa smartijem....
[ ColdKeyboard @ 16.04.2010. 10:18 ] @
Evo ti ovdje sta je smarty i sta sa njime sve mozes da uradis i za sta je dobar. *link*
Ukratko Smarty je jedan od mnogih template enginea koji ti omogucava da razdojis aplikaciju na dizajn i kod odnosno da imas posebne HTML/TPL fajlove za dizajn
i posebne .php fajlove gdje ces drzati svoj kod.
I onda recimo u kodu ti uradis $smarty->assign('varijabla', 'Vrijednost'); a u .tpl/.html kodu stavis {$varijabla} i template engine ce taj dio {$varijabla} da zamjeni sa 'Vrijednost'.
Da bi koristio smarty jako je pozeljno da poznajes PHP... :)
[ sheky @ 16.04.2010. 10:40 ] @
Za alfa-pro
Kod Smarty-ja kao i kod bilo čega sličnog iako mu je osnovna funkcija da odvoji dizajn od programiranja (projekat je dobar ako možeš da držiš dizajnere u Novom Sadu a programere u Nišu i da sve ide kako treba) potrebno je i da se ima razdvojena logika u programiranju (to se obično u tutorijalima ne kaže već početnik radom skonta) tj. da su ti i elementi koda dobro logički razdvojeni. Tek tada Smarty ima punu funkcionalnost. Bez toga i nije velika pomoć.
pozz
[ dendic @ 17.04.2010. 20:26 ] @
Mislim da tvom drugaru nedostaje pravi motiv da krene sa samostalnim pisanjem koda.Ako ga trenutno ne pokrece novac mozda ga pokrece zelja za nekim dokazivanjem pred samim sobom ili pred kolegama pa nek pokusa da kroz neki metajezik napise koju naredbu za neki svoj programski jezik.
[ tesliana @ 20.04.2010. 06:05 ] @
Odmjeriti, izrezati, zakucati itd, je sve potrebno da bi se znalo bilo sta napraviti. Ali sa tim se ne moze ni naj prostija brvnara izgraditi, ako je nikad nisi pre gradio. Ako se nisi skolovao kao arhitekta, e onda je potrebno makar proci kroz neciju tudju izgradjenu brvnaru pa malo naokolo pogledati kako je sastavljena. A kad je softver u pitanu, slobodno mozes da kopiras neciju tudju brvnaru pa da joj cak i koji stub izbijes i ako se ne srolja na zemlju, da cak i koji svoj ubacis.
Naucio si osnovice PHP programiranja a sad je naj bolje da uskocis u neciju vec izradjenu aplikaciju (bilo kakvu web aplikaciju a za pocetak sto prostije to bolje) i da po njoj cackaz i da u njoj promjenes sve ono sto ti se ne svidja ili cak i sve ono sto mozes i sam da zamislis da je moguce uraditi na neki drugi nacin - ma cak i gori nacin. Znaci, malo ko od nas je rodjen "naucen" i malo ko od nas je izumio nesto sto je stvarno novo. Vecina nas gradimo nase sofverske kule na tudjim temeljima, na kojima nesto i sami dogradimo a onda neko cak i to nase uzme pa na tome dogradi jos nesto. To nije samo licno ucenje vec je proces razvijanja citave programerske industrije.
[ alfa-pro @ 20.04.2010. 15:29 ] @
@tesliana
Ja mislim da si ovo bas lepo napisao... U sustini sve jeste tako
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|