Php kurrs

I

PHP
1 Kratak kurs PHP-a 2 Snimaçe i uåitavaçe podataka 3 Upotreba nizova 4 Rad sa znakovnim vrednostima i regularnim izrazima 5 Viãekratna upotreba koda i pisaçe funkcija 6 Objektno orijentisani PHP 7 Obrada izuzetaka

1
Kratak kurs PHP-a

O

VO POGLAVÀE SADRÆI KRATAK PREGLED sintakse i jeziåkih konstrukcija PHP-a. Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite praznine u svom znaçu, a ako ste ranije koristili C, ASP (Active Server Pages) ili neki drugi programski jezik, ovo poglavàe ñe vam pomoñi da brzo preœete na PHP. Radiñete na primerima iz stvarnog sveta, zasnovanim na iskustvu koje smo stekli pri izradi Web lokacija za elektronsku trgovinu i tako nauåiti kako da koristite PHP. Programerski udæbenici vas åesto uåe osnovnoj sintaksi, ali s veoma jednostavnim primerima. Mi smo odluåili da ne radimo tako. Svesni smo da åitaoci æele da ãto pre neãto pokrenu, da shvate kako se jezik koristi, umesto da se muåe s joã jednom sintaksom i objaãçeçima funkcija koja nisu niãta boàa od uputstava na Webu. Isprobajte naredne primere – otkucajte ih ili ih uåitajte sa CD-a, meçajte ih, rastavàajte i uåite kako da ih popravite. Poglavàe poåiçe primerom narudæbenice iz koga ñete nauåiti kako se u PHP-u koriste promenàive, operatori i izrazi. Govoriñemo o tipovima promenàivih i prioritetima operatora. Nauåiñete da pristupate promenàivama obrasca izraåunavajuñi ukupnu vrednost i porez na porudæbini. Zatim ñemo napraviti obrazac za unoãeçe podataka u kojem ñemo pomoñu PHP skripta proveriti ulazne podatke. Prouåiñemo koncept logiåkih vrednosti i primere upotrebe komandi if, else, operatora ?: i iskaza switch. I najzad, napisañemo petàe koje generiãu HTML tabele. U ovom poglavàu obraœene su sledeñe teme:

Ugradça PHP-a u HTML Generisaçe dinamiåkog sadræaja Pristup promenàivama obrasca Identifikatori Promenàive Tipovi promenàivih Dodela vrednosti promenàivama Konstante

12

Poglavlje 1 Kratak kurs PHP-a

Oblast vaæeça promenàivih Operatori i prioriteti Izrazi Funkcije Donoãeçe odluka pomoñu iskaza if, else i switch Iteracija: while, do i petàe for

Upotreba PHP-a
Da biste obradili primere iz ovog poglavàa i ostatka kçige, morate imati pristup Web serveru na koji je instaliran PHP. Da biste iz tih primera nauåili ãto viãe, trebalo bi da ih pokrenete i pokuãate da ih izmenite. Za to ñe vam biti potreban server na kome ñete eksperimentisati. Ako PHP nije instaliran na vaãem raåunaru, morañete prvo da ga instalirate ili da se za to obratite administratoru sistema. Uputstvo za instaliraçe pronañi ñete u dodatku A “Instaliraçe PHP-a i MySQL-a”. Sve ãto vam treba da biste instalirali PHP pod Unixom ili Windowsom NT nañi ñete na prateñem CD-u.

Probna aplikacija: Bobovi auto-delovi
Jedna od najåeãñih primena serverskih skript jezika jeste obrada HTML obrazaca. Uåeçe PHP-a poåeñete tako ãto ñete napraviti narudæbenicu za fiktivnu firmu “Bobovi auto-delovi”. Celokupan kôd primera koji se pomiçu u ovom poglavàu nalazi se na prateñem disku u direktorijumu chapter01.

Izrada obrasca za narudæbenicu
Web dizajner je napravio narudæbenicu za auto-delove koje Bob prodaje. To je relativno jednostavna narudæbenica (slika 1.1), sliåna mnogima koje ste do sada verovatno sretali na Webu. Bob bi æeleo da zna ãta su çegovi kupci naruåili i da izraåuna ukupnu vrednost naruåene robe i iznos poreza na tu robu. Deo HTML koda narudæbenice prikazan je u listingu 1.1.
Listing 1.1
orderform.html – HTML kôd osnovne verzije narudæbenice

<form action="processorder.php" method="post"> <table border="0"> <tr bgcolor="#cccccc"> <td width="150">Item</td> <td width="15">Quantity</td> </tr> <tr> <td>Tires</td> <td align="center"><input type="text" name="tireqty" size="3" maxlength="3" /></td> </tr>

To moæe biti metoda get (podaci se dodaju na kraj URL-a) ili metoda post (podaci se ãaàu zasebno). .Vrednost atributa action je URL koji ñe biti uåitan kada korisnik pritisne dugme Submit Order. Obratite paæçu na to da je u atributu action obrasca naveden PHP skript koji ñe obraditi porudæbinu (kasnije ñemo napisati taj skript).1 Poåetna verzija narudæbenice beleæi samo proizvode i koliåine. Podaci koje je korisnik uneo u obrazac biñe poslati stranici na toj adresi metodom zadatom u atributu method.Probna aplikacija: Bobovi auto-delovi 13 <tr> <td>Oil</td> <td align="center"><input type="text" name="oilqty" size="3" maxlength="3" /></td> </tr> <tr> <td>Spark Plugs</td> <td align="center"><input type="text" name="sparkqty" size="3" maxlength="3" /></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="Submit Order" /></td> </tr> </table> </form> Slika 1.

Zbog toga je vaæno da poàima u obrascu date smislena imena kojih ñete se lako setiti dok budete pisali PHP skript (na primer gumekol. Moæda bi vredelo da razmotrite i usvajaçe odreœenog standarda za imena poàa. koji ñete primeçivati na svim stranicama.Order Results</title> </head> <body> <h1>Bob's Auto Parts</h1> <h2>Order Results</h2> </body> </html> Obratite paæçu na to da je sve ãto ste do sada otkucali samo obiåan HTML. Trebalo bi da vidite neãto nalik na sledeñe: <html> <head> <title>Bob's Auto Parts .14 Poglavlje 1 Kratak kurs PHP-a Sledeñe ãto treba uoåiti jesu imena poàa u obrascu – tireqty. Otkucajte zatim sledeñi kôd: <html> <head> <title>Bob's Auto Parts . Taj skript ñe se zvati processorder.Tako ñe vam biti lakãe da zapamtite da li ste. Pogledajte izvorni kôd stranice u åitaåu Weba.</p>'. Obratite paæçu na to da je PHP kôd naredaba koji ste napisali ugraœen u obiånu HTML datoteku. u imenu poàa skratili reå ili ste umesto razmaka stavili znak za podvlaåeçe. Obrada podataka sa obrasca Da bismo obradili podatke sa obrasca. oilqty i sparqty. ?> Snimite datoteku i pogledajte je u åitaåu Weba tako ãto ñete popuniti obrazac i pritisnuti dugme Submit Order.Vreme je da dodate neãto jednostavnog PHP koda u skript. Trebalo bi da se pojavi rezultat nalik na onaj sa slike 1. koja se teãko pamte. Neki editori za HTML daju poàima podrazumevana imena. Pokrenite svoj editor teksta i napravite tu datoteku. na primer. uàekol i modelkol). na primer field23.Order Results</title> </head> <body> .php. olakãañete sebi programiraçe. Ako imena poàa odraæavaju unete podatke. Ugradça PHP koda u HTML kôd Ispod naslova <h2> u datoteci.2. treba da napravimo skript pomenut u atributu action oznake form.Ta imena ñemo upotrebiti i u PHP skriptu. dodajte sledeñe redove: <?php echo '<p>Order processed.

koji se moæe gledati pomoñu svakog åitaåa. Kôd koji se sada nalazi u PHP datoteci sastoji se od åetiri vrste elemenata: HTML oznake PHP oznake PHP iskazi beline Moæemo da dodamo i komentare Veñinu redova u navedenom primeru åini obiåan HTML.Ugradça PHP koda u HTML kôd 15 <h1>Bob's Auto Parts</h1> <h2>Order Results</h2> <p>Order processed. Prethodni primer ilustruje naåin rada serverskih skriptova. åitaå ne mora da razume PHP. .2 Tekst prosleœen naredbi echo poslat je åitaåu Weba. za razliku od JavaScripta i drugih klijentskih jezika koji se prevode i izvrãavaju unutar åitaåa Weba na korisnikovom raåunaru. To znaåi da se iz PHP koda dobija åisti HTML kôd. Drugim reåima.</p></body> </html> Slika 1. PHP naredbe se ne vide zato ãto je interpretator PHP koda zamenio naredbe rezultatom. PHP kôd se interpretira i izvrãava na Web serveru.

</p>'. Poãto ga administrator servera ne moæe iskàuåiti.16 Poglavlje 1 Kratak kurs PHP-a PHP oznake PHP kôd iz prethodnog primera poåeo je sa <?php i zavrãio se sa ?>. Ako hoñete da ga koristite.</p>'.</p>'. on ñe sigurno biti dostupan na svim serverima. PHP oznake omoguñavaju da izaœemo iz bloka HTML koda. . Da biste mogli da ga koristite. Postoje razliåiti tipovi PHP oznaka koje ñemo u nastavku detaànije objasniti. XML stil <?php echo '<p>Order processed. Ako na Web lokaciji upotrebàavate XML dokumente. Meœutim. ?> Ovaj stil oznaka koristimo u kçizi. Sledeñi primeri koda meœusobno su ekvivalentni.NET. PHP tags). To je sliåno HTML oznakama jer sve one poåiçu znakom “maçe od” (<) i zavrãavaju se znakom “veñe od” (>). Moæete ga upotrebiti ako vam HTML editor pravi probleme s drugim stilovima oznaka.NET-u. Te kombinacije znakova nazivaju se PHP oznake – one Web serveru pokazuju gde PHP kôd poåiçe i gde se zavrãava. %> Ovaj stil oznaka koristi se u okruæeçima ASP i ASP. stil SCRIPT <SCRIPT LANGUAGE='php'> echo '<p>Order processed. Ceo tekst izmeœu te dve oznake smatra se PHP kodom. upotreba ovog stila se ne preporuåuje. ASP stil <% echo '<p>Order processed. Tekst izvan tih oznaka samo se prosleœuje åitaåu jer predstavàa obiåan HTML kôd. ?> Ovaj stil je jednostavniji i oznake liåe na instrukcije za obradu u SGML-u. Iako je on standardno ukàuåen. Moæe se koristiti s XML dokumentima. potrebno je da u konfiguracijskoj datoteci PHP okruæeça aktivirate opciju short_tags ili da prevedete PHP sa ukàuåenim kratkim oznakama. </script> Ovaj stil oznaka je najduæi i biñe vam poznat ako ste koristili JavaScript ili VBSrcipt. koristite ovaj stil oznaka.</p>'. administratori sistema ga ponekad iskàuåuju jer moæe biti uzrok pogreãnog tumaåeça deklaracija u XML dokumentima. a to je i stil åija se upotreba preporuåuje. Ovaj stil oznaka dobro ñe vam doñi ako koristite editor za izradu ASP i ASP. Imajte u vidu da je ovaj stil oznaka standardno iskàuåen.Viãe informacija o upotrebi skrañenog stila oznaka nañi ñete u dodatku A.NET stranica ili veñ programirate na ASP-u ili ASP. Skrañeni stil <? echo '<p>Order processed. aktivirajte konfiguracijski parametar asp_tags. Stilovi PHP oznaka Postoje åetiri stila PHP oznaka (engl. ãto je naroåito korisno kada se aplikacija koristi na viãe razliåitih servera.

Pogledajte ova dva bloka koda: <h1>Welcome to Bob's Auto Parts!</h1><p>What would you like to order today?</p> i <h1>Welcome Auto Parts!</h1> <p>What would you like to order today?</p> to Bob's Oba bloka koda daju identiåan rezultat zato ãto åitaåu izgledaju isto. Beline Znakovi za razdvajaçe. Na primer. Kao ãto ste verovatno pretpostavili. i echo 'hello '. Isto se odnosi i na PHP. Nema potrebe da izmeœu PHP iskaza stoje beline.echo 'world'. U HTML kodu moæete da koristite beline kao pomoñno sredstvo kojim ñete kôd stranica uåiniti åitàivijim. white spaces). poput novog reda (znak za povratak na poåetak reda). rezultati iskaza: echo 'hello '. Komentari se mogu upotrebiti da objasne skript. identiåni su. ali se prvi lakãe åita. PHP statements) nalaze se izmeœu poåetnih i zavrãnih oznaka i odreœuju ãta interpretator PHP koda treba da uradi. echo 'world'. Komentare ñete nalaziti gotovo u svim PHP skriptovima.Ugradça PHP koda u HTML kôd 17 PHP iskazi PHP iskazi (engl. . zaãto je baã tako napisan. nazivaju se beline (engl. Isto tako postupa i izvrãno okruæeçe za PHP. Obratite paæçu na to da se na kraju iskaza echo nalazi znak taåka i zarez. razmaka i tabulatora. Ako ste programirali na C-u ili na Javi. Sreñom. upotreba naredbe echo veoma je jednostavna: ona ãtampa (ili ispisuje) u åitaåu tekst koji joj prosledite. kada je posledçi put izmeçen itd. kao ãto se u govornom jeziku za razdvajaçe reåenica koristi taåka. takva upotreba taåke i zareza biñe vam poznata. On razdvaja izraze u PHP-u. ãto vam i preporuåujemo. Na slici 1. U navedenom primeru upotrebili smo samo jedan tip iskaza: echo '<p>Order processed.</p>'. takva greãka se isto tako lako otkriva i ispravàa. da opiãu ko ga je napisao. Izostavàaçe taåke i zareza åesta je sintaksna greãka koja se lako pravi.2 vidite da je rezultat to da se tekst “order processed pojavàuje u prozoru åitaåa. Åitaåi zanemaruju beline u HTML kodu. osim u onim najjednostavnijim. ali se kôd s çima lakãe åita. Komentari Komentari su upravo to ãto im samo ime kaæe i sluæe kao obaveãteça àudima koji åitaju kôd.

. a ovo nije. Za komentare u jednom redu moæete koristiti stil jezika C++: echo '<p>Order processed.3. # Ãtampaj narudæbenicu U oba stila. Tekst iza zavrãne PHP oznake. poãto PHP interpretator zanemaruje tekst u komentaru. obraœivañe se kao HTML kôd jer se nalazi iza zavrãne PHP oznake: // ovo je komentar ?> a ovo nije Dodavaçe dinamiåkog sadræaja stranici Sve ãto smo do sada uradili u PHP-u. echo '</p>'. podstañi posetioce da se vrañaju na Web lokaciju. echo date('H:i. zato ãto ñe sadræaj koji se meça periodiåno ili prema potrebama korisnika.18 Poglavlje 1 Kratak kurs PHP-a U suãtini. jS F'). U narednom redu koda. C++ i skriptova komandnog okruæeça. Isto kao u jeziku C. ovo je komentar. PHP podræava komentare u stilu jezika C. Prilikom svakog izvrãavaça skripta biñe ispisane razliåite vrednosti. */ Viãeredni komentari treba da poåiçu sa /* i zavrãavaju se sa */. ?> U ovom kodu koristimo ugraœenu funkciju PHP-a date(). koji bi mogao da se pojavi na poåetku PHP skripta: /* Pera Petroviñ Izmeçen: 10. aprila Skript obraœuje narudæbine. mogli smo da uradimo i pomoñu obiånog HTML koda. Poånimo jednostavnim primerom. Rezultat posle jednog izvrãeça skripta prikazan je na slici 1. Glavni razlog upotrebe serverskog skript jezika jeste moguñnost prikazivaça dinamiåkog sadræaja.php sledeñim kodom: <?php echo '<p>Order processed at '. pomoñu koje kupcu saopãtavamo datum i vreme kada je çegova porudæbina obraœena. PHP omoguñava laku izradu dinamiåkog sadræaja. Zamenimo PHP u datoteci processorder. moæe se smatrati da je ekvivalentan belini.To je vrlo vaæna primena. tekst ispred zavrãne PHP oznake.</p>'. viãeredni komentari ne mogu biti ugneæœeni jedni u druge. deo je komentara.</p>'. Sledi viãeredni komentar u stilu jezika C. sve ãto se nalazi iza simbola jednorednog komentara (# ili //) zanemaruje se do kraja reda ili do zavrãne PHP oznake. // Ãtampaj narudæbenicu ili stil skriptova komandnog okruæeça: echo '<p>Order processed.

koje moæete da koristite u Web aplikacijama. jS F') Obratite paæçu na to da funkciji prosleœujemo niz znakova (tekst) izmeœu zagrada.Veñini tih funkcija ili treba proslediti neke podatke. To je opãti oblik pozivaça funkcija. Element naveden izmeœu zagrada zove se argument ili parametar funkcije. S predstavàa redni sufiks na engleskom jeziku (u ovom sluåaju “th”). Svako slovo u argumentu predstavàa jedan element datuma i vremena.3 PHP funkcija date() vraña formatiran datum. s vodeñom nulom ako treba. i je minut. . Pozivaçe funkcija Pogledajmo poziv funkcije date(). H je sat u 24-åasovnom formatu. PHP sadræi bogatu biblioteku funkcija.Dodavaçe dinamiåkog sadræaja stranici 19 Slika 1. Argumenti su ulazni podaci na osnovu kojih funkcija daje odreœen rezultat. Kompletan spisak formata koje podræava funkcija date() potraæite u poglavàu 20. ili one vrañaju neke podatke. j je dan u mesecu bez vodeñe nule. Pogledajmo naredni poziv funkcije: date()('H:i. Upotreba funkcije date() Funkcija date() oåekuje kao argument znakovni niz koji predstavàa format rezultata koji æelite. a F je puno ime meseca.

$_POST['tireqty']) za promenàive koje predstavàaju poàa obrasca. Kada koristite kratki stil. verovatno biti ukinut. Poãto te metode nemaju zvaniåna imena.1.ini. Kratki stil ($tireqty) je praktiåan. U svim sluåajevima. Sadræaju poàa tireqty moæete pristupiti na tri naåina: $tireqty $_POST['tireqty'] $HTTP_POST_VARS['tireqty'] // kratki stil // sredçi stil // dugi stil U ovom primeru. pa ñemo opisati sve tri metode. svakom poàu na obrascu moæete pristupiti preko istoimene PHP promenàive (engl.0 nadaàe. postoje tri naåina pristupaça podacima na obrascu pomoñu promenàivih. One se skriptu prosleœuju na isti naåin kao ãto se argumenti prosleœuju funkciji. ali zahteva da konfiguracijski parametar register_globals bude podeãen na vrednost on (da li on standardno ima tu vrednost ili ne. (To je preporuåeni oblik od verzije PHP-a 4. ovaj parametar ima vrednost off. pa se zato viãe ne preporuåuje.2. niti uraditi bilo ãta drugo da biste napravili promenàive u skriptu. dali smo im sledeñe nadimke: kratki. Pre toga. i od parametara u datoteci php. Ako koristite kratki stil. ali upotrebàiv je tek od verzije PHP-a 4. ali naåin zavisi od verzije PHP-a koju koristite. Sredçi stil ($_POST['tireqty']) sada se preporuåuje. Dugi stil ($HTTP_POST_VARS['tireqty']) najopãirniji je. U svim verzijama PHP-a od 4.) Vi ñete se moæda opredeliti za drugaåiji pristup. Priliåno je praktiåan. imena promenàivih u skriptu ista su kao imena poàa na HTML obrascu. ali se moæe iskàuåiti pomoñu konfiguracijske direktive register_long_arrays. a i u nastavku kçige. zavisi od verzije PHP-a).) U zavisnosti od toga koju verziju PHP-a koristite i kako je ona podeãena.2.20 Poglavlje 1 Kratak kurs PHP-a Pristup promenàivama obrasca Svrha obrasca za porudæbine jeste prikupàaçe porudæbina koje kupci ãaàu. ali smo radi lakãe upotrebe pravili kratke verzije promenàivih. standardna vrednost parametra bila je on.0 nadaàe. Imajte u vidu da je zastareo i da ñe zbog toga. Nije potrebno deklarisati promenàive. Promenàive obrasca Unutar PHP skripta. Ovaj stil je nekada bio podræan u najveñem broju verzija.0.(Izostavàaçe ovog znaka je uobiåajena programerska greãka. ãto znaåi da na starijim instalacijama neñe raditi. Imena promenàivih u PHP-u lako se prepoznaju jer svako poåiçe znakom za dolar ($). sredçi i dugi stil. koristili smo sredçi stil (tj. ãto je bio uzrok mnogih zabuna u vreme uvoœeça izmene. Ovaj stil dozvoàava da pravite greãke zbog kojih kôd neñe biti bezbedan. treba samo da navedete ime . svako poàe obrasca poslatog PHP skriptu dostupno je u skriptu. variable). ãto poboàãava performanse. U PHP-u se lako pristupa podacima koje je kupac uneo. pre ili kasnije.

moæda neñete moñi da pristupite nizovima $_POST ili $_GET. podaci iz poàa tireqty nalaziñe se u elementu $_POST['tireqty']. naæalost. Sledeñi iskaz pravi novu promenàivu po imenu $tireqty i kopira u çu sadræaj elementa $_POST['tireqty']: $tireqty = $_POST['tireqty']. korisno je razmotriti zaãto ga razvojni tim PHP-a nije tako podesio. $_POST ili $_GET. takozvanih superglobalnih nizova. kratki oblik pristupa promenàivama. koristite operator za dodelu.1. dozvoàava da pravite programerske greãke koje bi mogle da ugroze bezbednost skriptova.0 i ponekad neñe biti kompatibilni s verzijama starijim od 4. podacima koje su uneli korisnici moñi ñete da pristupate preko elemenata $HTTP_POST_VARS['tireqty'] ili $HTTP_GET_VARS['tireqty']. Osim toga. GET ili POST. Poàu tireqty na obrascu odgovara promenàiva $tireqty u skriptu. sadræañe vrednosti svih poàa obrasca. Kao ãto smo veñ napomenuli. U oba sluåaja. Ako koristite dugi stil. Kada se sve promenàive obrasca pretvore u globalne promenàive kao u navedenom primeru. svi podaci poslati pomoñu metode GET ili POST biñe dostupni u nizu $_REQUEST. Pre verzije 4. npr. korisnici skriptova moñi ñe da prosleœuju svoje promenàive i vrednosti preko obrasca i da ih meãaju s vaãim u kodu skripta. Preporuåujemo da. ali. praviñemo kopije promenàivih koje se jednostavnije upotrebàavaju. zapamtite da morate obavezno zadati poåetne vrednosti svim lokalnim promenàivama. Da biste vrednost jedne promenàive kopirali u drugu. Jedan od nizova.To nazivamo dugim stilom. $_POST. podaci ñe biti dostupni i u elementu $_REQUEST['tireqty']. Koji niz ñe biti upotrebàen zavisiñe od metode koja se koristi za slaçe obrasca. koji nisu detaànije opisani pre poglavàa 3. Pogledajmo joã jedan primer. ali pre nego ãto parametar register_globals podesite na on. Ovako jednostavan oblik pristupa promenàivama na prvi pogled izgleda privlaåan.1.Pristup promenàivama obrasca 21 promenàive. $_GET ili $_REQUEST. U çemu ne postoji ekvivalent nizu $_REQUEST. Ukoliko je obrazac poslat metodom POST.0. koristite tekuñu verziju. . Buduñi da su dugi i sredçi oblik imena promenàivih pomalo nezgrapni i podrazumevaju rad s nizovima. Direktan pristup promenàivama poput navedenog oblika vrlo je praktiåan. ovaj stil je zastareo. $tireqty.0. Sredçi stil podrazumeva uåitavaçe vrednosti promenàivih obrasca iz jednog od nizova. koriãñeni su nizovi $HTTP_POST_VARS i $HTTP_GET_VARS. Ako se opredelite za praktiåni. gde god je moguñe. Ako koristite neku stariju verziju PHP-a. podaci ñe se nalaziti u elementu $_GET['tireqty'].Vratiñemo se na çih kada budemo govorili o opsegu vaæeça promenàivih. Ako je obrazac poslat metodom GET. a to je u PHP-u znak jednakosti (=). Primeri u kçizi testirani su na verziji PHP-a 5. ne postoji jasno razdvajaçe izmeœu promenàivih koje ste vi napravili u svom kodu i nepouzdanih promenàivih koje stiæu direktno od korisnika. Ovi nizovi su neki od novih. Ako zaboravite da svim promenàivama koje ste napravili u kodu dodelite poåetne vrednosti.

Taåka je operator za nadovezivaçe znakovnih podataka (blokova teksta) (engl. $sparkqty = $_POST['sparkqty']. (Poãto su nizovi neãto sloæeniji. string concatenation). Buduñi da taj blok koda ne ispisuje niãta. Ako paæàivije pogledate iskaze echo. Razume se. videñete da se izmeœu imena promenàive i prateñeg teksta nalazi taåka (. PHP ñe u tom sluåaju zameniti ime promenàive odgovarajuñom vrednoãñu. <?php //formira promenàive s kratkim imenima $tireqty = $_POST['tireqty']. Da bi skript davao vidàiv rezultat. kao u sledeñem iskazu: echo $tireqty. dodajte na kraj sledeñe redove: echo echo echo echo '<p>Your order is as follows: </p>'. Namerno unesite pogreãne podatke i posmatrajte ãta se deãava. Zasad joã niste ispitali vrednosti promenàivih da biste znali da li su u sva poàa obrasca unete prihvatàive vrednosti.). Poãto proåitate preostali deo ovog poglavàa. $oilqty = $_POST['oilqty']. kombinovaçe nizova i znakovnih podataka objasniñemo u poglavàu 4.' tires<br />'. prikazane vrednosti zavisiñe od onih koje unesete na obrascu. svejedno je da li ñete ga postaviti ispred ili iza oznake <html> i drugih poåetnih HTML oznaka. moæda ñete pokuãati da u ovom skriptu dodate kôd za proveru ispravnosti podataka. $tireqty. Tako neñete morati da piãete viãe komandi echo. $oilqty i $sparkqty. $tireqty.' spark plugs<br />'. Nadovezivaçe tekstualnih podataka Navedeni skript ispisuje pomoñu komande echo vrednost koju je korisnik uneo u poàe obrasca.4. $sparkqty. $oilqty.) .22 Poglavlje 1 Kratak kurs PHP-a Umetnite sledeñi blok koda na poåetak skripta. Åesto ñete je koristiti kada komandom echo prosledite izlazne podatke åitaåu. trebalo bi da vidite rezultat nalik na onaj sa slike 1. “Rad sa znakovnim vrednostima i regularnim izrazima”. ?> Navedeni kôd pravi tri nove promenàive. Takav blok koda obiåno stavàamo na poåetak skripta da bismo lakãe mogli da ga pronaœemo. kojoj sledi odreœeni opisni tekst. Ime promenàive (koja nije niz) moæete upisati izmeœu navodnika.' tires<br />'. Sliåan blok koda nalaziñe se na poåetku svih ostalih skriptova u ovoj kçizi koji obraœuju podatke sa obrazaca. koje sadræe podatke poslate iz obrasca metodom POST. Ako sada otvorite ovaj skript u svom åitaåu.' bottles of oil<br />'. zajedno s drugim tekstom koji prosleœujete komandi echo. U narednim odeàcima opisano je nekoliko zanimàivih elemenata u vezi sa ovim skriptom.

variables). Promenàive i literali Promenàive i tekst koji spajate u svakom iskazu echo navedenog skripta jesu elementi razliåitog tipa. Oba formata su ispravna i od vas zavisi koji ñete koristiti.4 Vrednostima promenàivih koje je korisnik uneo u obrazac lako se pristupa u skriptu processorder. Imena promenàivih umetnuta u tekst napisan izmeœu polunavodnika ne daju isti rezultat. dok je tekst vrednost podataka.Pristup promenàivama obrasca 23 Slika 1. Imajte u vidu da se interpoliraçe primeçuje iskàuåivo u blokovima teksta omeœenim navodnicima.php. ãaàe åitaåu tekst "$tireqty tires<br />" . Ime $tireqty je promenàiva – koja predstavàa podatke . literals) da bi se razlikovali od promenàivih (engl. ime promenàive ili svaki drugi tekst ostaju neizmeçeni. Sledeñi iskaz: echo '$tireqty tires<br />'. Razmotrite sledeñe: echo "$tireqty tires<br />". Sirovi podaci se u programima nazivaju literali (engl. U tekstu napisanom izmeœu polunavodnika. Navedeni iskaz je ekvivalentan prvom iskazu u ovom odeàku. Ovaj postupak – zamena imena promenàive çenom vrednoãñu unutar bloka teksta – zove se interpoliraçe. Ime promenàive unutar teksta napisanog izmeœu navodnika biñe zameçeno çenom vrednoãñu. Promenàive su simboli za podatke.

U stvari. Znakovni podaci zadati izmeœu polunavodnika obraœuju se kao pravi literali. (Imena funkcija i klasa takoœe su identifikatori. Promenàive koje deklariãe korisnik Osim promenàivih koje su prosleœene iz HTML obrasca. u skriptovima moæete da koristite i promenàive koje sami deklariãete. Nedavno je dodat i treñi naåin zadavaça znakovnih podataka. Da biste zadali znakovnu vrednost u heredoc formatu. Identifikatori Identifikatori su imena promenàivih. . podvlaka. U narednom primeru.) U vezi sa upotrebom identifikatora. ãto ste veñ videli. Identifikatori ne mogu da poåiçu cifrom. ta tehnika dovodi do zabune i trebalo bi je izbegavati. Promenàiva moæe da ima isto ime kao i funkcija. PHP ñe pokuãati da izraåuna vrednost znakovnih podataka zadatih izmeœu navodnika.24 Poglavlje 1 Kratak kurs PHP-a koje je uneo korisnik. trebalo bi da znate sledeña osnovna pravila: Identifikatori mogu biti bilo koje duæine i mogu da se sastoje od slova.Vaæno je samo da se ne pojavàuje u tekstu. S druge strane. Señate li se drugog primera? PHP je zamenio ime promenàive $tireqty vrednoãñu promenàive. U PHP4 dodata je heredoc sintaksa (<<<). dodajte graniånik na poåetak reda. brojeva. Znakovne vrednosti zadate u heredoc formatu interpoliraju se isto kao one zadate izmeœu navodnika. tako ãto se zada i graniånik kojim se znakovni podatak zavrãava. poznata korisnicima Perla. o funkcijama i klasama govorimo u petom i ãestom poglavàu. Imena funkcija su izuzetak od ovog pravila – çihova imena se mogu pisati i malim i velikim slovima. U PHP-u se pravi razlika izmeœu malih i velikih slova u imenima identifikatora. Ne zaboravite da u PHP-u postoje dve vrste znakovnih podataka: zadate izmeœu navodnika i izmeœu polunavodnika. Heredoc sintaksa omoguñava zadavaçe duæih znakovnih podataka u lako razumàivom obliku. Ne moæete napraviti funkciju koja ñe imati isto ime kao i postojeña funkcija. a meãaçe jednog s drugim tipiåna je programerska greãka. ne sasvim doslovno. znakovni podatak se deli u tri reda pre nego ãto ga obradi komanda echo: echo <<<kraj prvi red drugi red treñi red kraj Graniånik kraj moæe biti bilo ãta. $tireqty nije isto ãto i $TireQty. Meœutim. ' tires<br />' je literal åija se vrednost tumaåi doslovno.

koristi se za znakovne podatke boolean – logiåki. “Objektno orijentisani PHP”) Postoje i dva specijalna tipa podataka: NULL i resurs. Skoro je izvesno da s tim tipom neñete direktno raditi. Promenàiva ñe biti napravàena kada joj prvi put dodelite vrednost – dodatne informacije potraæite u sledeñem odeàku. “Upotreba nizova”) object – objekat. Na poåetku ñete obema dodeliti vrednost nula. koristi se za åuvaçe viãe podataka istog tipa (videti poglavàe 3. Dodeàivaçe vrednosti promenàivama Promenàivama dodeàujete vrednost pomoñu operatora za dodelu vrednosti. æelite da izraåunate ukupan broj naruåenih artikala i çihovu ukupnu vrednost. Promenàive kojima nije dodeàena vrednost. Promenàivama moæete da dodelite i vrednosti drugih promenàivih. ali se åesto koriste za vrednosti koje funkcije vrañaju ili koje im se prosleœuju. Tipovi promenàivih Tip promenàive se odnosi na vrstu podataka koji se u çoj nalaze. Tipovi podataka u PHP-u PHP podræava sledeñe osnovne tipove podataka: integer – celobrojni. koje predstavàaju spoàne resurse (kao ãto su veze s bazama podataka). $totalamount = $totalqty. za rad s bazama podataka) vrañaju promenàive tipa resurs.00. kao ãto ste to uradili kada ste kopirali vrednost jedne promenàive u drugu. koristi se za åuvaçe primeraka (instanci) klasa (videti poglavàe 6. . koje su nedefinisane ili kojima je izriåito dodeàena vrednost NULL. koristi se za realne brojeve string – znakovni. =.Tipovi promenàivih 25 Jedna od karakteristika PHP-a jeste to ãto ne treba da deklariãete promenàive pre nego ãto ih upotrebite. Neke ugraœene funkcije (npr. Na Bobovoj Web lokaciji. Svaki od navedena dva reda pravi promenàivu i daje joj vrednost literala. na primer: $totalqty = 0. Za åuvaçe tih iznosa moæete da napravite dve promenàive. koristi se za podatke tipa taåno ili netaåno array – niz. tipa su NULL. PHP-ov skup tipova podataka neprestano se ãiri. $totalamount = 0. koristi se za cele brojeve double ili float – pokretni zarez dvostruke preciznosti. Na kraj PHP skripta dodajte sledeñe redove: $totalqty = 0.

Skriptu bismo sada mogli da dodamo sledeñi red: $totalamount = 'Hello'. Na isti naåin. U veñini programskih jezika. PHP ñe vratiti podatak upisanog tipa prilikom uåitavaça vrednosti promenàive. Promenàiva $totalamount bi u tom sluåaju bila znakovnog tipa. $totalamount = 0. Ne zaboravite da PHP “automatski” zna koji ste tip podataka stavili u promenàive. Tip konvertovane promenàive se ne meça. Promenàiva promenàiva se dobija kada se vrednost jedne promenàive koristi kao ime druge. Novi privremeni tip upiãite u zagradu ispred promenàive koju æelite da konvertujete.Tip promenàive $totalamount biñe double. PHP u ovoj oblasti daje dosta slobode – svi programski jezici puãtaju da meçate vrednost promenàive. Kao ãto vidite. $totalamount = (double)$totalqty. Na primer. kada smo napravili promenàive $totalqty i $totalamount. Na primer: $varname = 'tireqty'. Drugi red znaåi “proåitaj vrednost promenàive $totalqty. . Moguñnost promene tipa podataka u hodu moæe biti veoma korisna. Postupak se odvija identiåno kao u C-u. promenàiva $totalamount sada je u formatu pokretnog zareza dvostruke preciznosti. Takve promenàive omoguñavaju da ime promenàive meçate dinamiåki. S obzirom na to da smo promenàivoj $totalqty dodelili vrednost 0.26 Poglavlje 1 Kratak kurs PHP-a Provera tipa podataka PHP je jezik s veoma slabom proverom tipa podataka. çihovi poåetni tipovi bili su odreœeni ovako: $totalqty = 0. Joã ih maçe prihvata da meçate ime promenàive. Konverzija tipa podataka Operator za konverziju omoguñava privremenu promenu tipa promenàive ili vrednosti. U PHP-u se tip promenàive odreœuje na osnovu vrednosti koja joj je dodeàena.00. ali nema mnogo jezika koji dopuãtaju da meçate tip promenàive. tako da $totalqty ostaje celobrojnog tipa. PHP meça tip promenàive prema onome ãto se u çoj nalazi. kao ãto je sluåaj u C-u. Promenàive promenàive PHP podræava joã jedan tip promenàive – promenàivu promenàivu (engl. tumaåi je kao vrednost tipa double i smesti je u promenàivu $totalamount”. to je sada promenàiva celobrojnog tipa. Na primer. u deklaraciji dve promenàive iz prethodnog odeàka moæete primeniti konverziju tipa podataka: $totalqty = 0. ãto je ceo broj. promenàive mogu da sadræe samo jedan tip podataka koji se pre upotrebe promenàive mora deklarisati. variable variable).

4). Ta konvencija. Sada imate tri konstante pomoñu kojih moæete izraåunati ukupan iznos porudæbine koju je kupac poslao. define('TIREPRICE'. Deklarisaçe i upotreba konstanti Kao ãto ste videli ranije. Konstanta predstavàa odreœenu vrednost. Osim toga. da biste upotrebili konstantu koju ste upravo napravili. define('OILPRICE'. O nekima od çih biñe reåi kasnije. Na primer. celobrojnog ili znakovnog tipa i numeriåke podatke s pokretnim zarezom. U izvrãnom okruæeçu za PHP definisan je velik broj konstanti. . Moæete ih pregledati pomoñu komande phpinfo(): phpinfo(). Dodajte navedene redove u skript. Vaæna razlika izmeœu konstanti i promenàivih jeste ta da se ispred konstante ne piãe simbol za dolar. upiãite samo çeno ime. Te konstante moæete da definiãete pomoñu funkcije define. Na primer. moæete da deklariãete i konstante. olakãava razlikovaçe promenàivih i konstanti. Obratite paæçu na to da su sva imena konstanti napisana velikim slovima. 100). U odeàku o petàama for nalazi se primer koji ilustruje tu tehniku. napisañete: echo TIREPRICE. pozajmàena iz C-a. isto kao i promenàiva. Ona nije obavezna. kao i neke druge korisne informacije. moæete da koristite $$varname. ali ñe olakãati åitaçe i odræavaçe koda. ãto je ekvivalentno izrazu: $tireqty = 5. moæete da upotrebite petàu i promenàivu i da ih sve obradite automatski. Upotreba ove vrste promenàivih moæda vam zasad nije sasvim jasna. 10). Navedeni tipovi podataka poznati su pod zajedniåkim imenom skalarni tipovi. Na primer. vrednost koja se åuva u promenàivoj moæete da meçate kad god vam zatreba. ali ñemo ih objasniti neãto kasnije. Joã jedna razlika izmeœu konstanti i promenàivih jeste ta da konstante mogu sadræati samo podatke logiåkog. cene artikala koji se prodaju moæete åuvati kao konstante. Ako æelite da upotrebite vrednost konstante. ali se ta vrednost zadaje jednom i potom se viãe ne moæe meçati. Umesto da svaku promenàivu obrasca navodite i koristite zasebno. define('SPARKPRICE'. promenàivoj $tireqty moæete da dodelite vrednost sledeñim iskazom: $$varname = 5.Deklarisaçe i upotreba konstanti 27 Umesto promenàive $tireqty. koja prikazuje spisak unapred definisanih konstanti i promenàivih.

u funkcijama i van çih. Opseg vaæeça promenàivih detaànije ñemo objasniti kada budemo govorili o funkcijama. Od PHP-a 4. obuhvata i nizove $_GET. deklarisane u skriptu vidàive su svuda u skriptu. U PHP-u postoji ãest moguñnosti opsega vaæeça: Ugraœene superglobalne promenàive vide se u celom skriptu. na primer: $GLOBALS[’nekapromenljiva’]) $_SERVER – niz serverskih promenàivih $_GET – niz promenàivih prosleœenih skriptu metodom GET $_POST – niz promenàivih prosleœenih skriptu metodom POST $_COOKIE – niz kolaåiña $_FILES – niz promenàivih koje se odnose na datoteke poslate s klijentskog raåunara $_ENV – Niz promenàivih okruæeça $_REQUEST – Niz svih promenàivih koje je korisnik poslao. $_POST i $_COOKIE $_SESSION – Niz promenàivih sesije. Za sada ñe sve promene koje koristimo biti globalne promenàive.) Promenàive koje napravite unutar funkcije lokalne su za funkciju i prestaju da postoje kada prestane izvrãavaçe funkcije. scope) odnosi se na mesta u skriptu na kojima je data promenàiva vidàiva. ne vide se izvan funkcija.28 Poglavlje 1 Kratak kurs PHP-a Opseg vaæeça promenàive Izraz opseg vaæeça (engl.1 nadaàe. poãto ih deklariãete. (Ovu ideju detaànije objaãçavamo u poglavàu 5. To su superglobalne promenàive koje se vide svuda. upuñuje na globalnu promenàivu istog imena. kako se budu pojavàivale u kçizi. (Sliåno rezervisanoj reåi global. Globalne promenàive. uvek imaju globalnu vidàivost. Konstante. $GLOBALS Sve navedene promenàive opisañemo kasnije. ovaj niz omoguñava pristupaçe globalnim promenàivama. a date joj isto ime kao promenàivoj koja je deklarisana kao globalna. i za neke druge posebne promenàive. Promenàive koje napravite unutar funkcije. to znaåi da su upotrebàive unutar i izvan funkcija. a deklariãete kao statiåke promenàive. vaæe drugaåija pravila za opseg vaæeça. ali ne i unutar funkcija. za nizove $_GET i $_POST. “Viãekratna upotreba koda i pisaçe funkcija”. osim ako je drugaåije naglaãeno. Kompletan spisak superglobalnih promenàivih je: – niz svih globalnih promenàivih. ali åuvaju svoje vrednosti izmeœu dva izvrãavaça funkcije. . Promenàiva koju napravite unutar funkcije.

Obratite paæçu na to da se kao znak za mnoæeçe koristi zvezdica (umesto uobiåajenog znaka mnoæeça).$b $a * $b $a / $b $a % $b Operator + * / % Rezultat operacije svakog operatora moæe se saåuvati u nekoj promenàivoj. Sabira se i oduzima kao u matematici. $result = $a%$b.1. Tabela 1.1 Aritmetiåki operatori jezika PHP Ime sabiraçe oduzimaçe mnoæeçe deàeçe modulo Primer $a + $b $a . odnosno razlika vrednosti koje se nalaze u promenàivama $a i $b. Mnoæeçe i deàeçe takoœe se odvijaju kao i matematiåke operacije istog imena. operator dodele i operator nadovezivaça znakovnih vrednosti.Operatori 29 Operatori Operatori su simboli koji omoguñavaju izvrãavaçe operacija nad vrednostima i promenàivama. $b = 10. Na primer. Na primer. Operator modulo vraña ostatak celobrojnog deàeça promenàive $a promenàivom $b. . Ti argumenti se nazivaju operandi – vrednosti kojima se operiãe. Aritmetiåki operatori Aritmetiåki operatori su priliåno jednostavni – to su obiåni znakovi za raåunske operacije. dva ili tri argumenta. Neke od çih ñete upotrebiti da biste na porudæbini izraåunali ukupan iznos i porez. dakle 7. a kao znak za deàeçe sluæi kosa crta. Prikazani su u tabeli 1. Operatori mogu imati jedan. $result = $a + $b. Pogledajmo sada kompletan spisak. s tim ãto veñina ima dva. Vrednost promenàive $result biñe ostatak celobrojnog deàeça 27 sa 10. odnosno operandom) za negativne brojeve. Rezultat tih operacija je zbir. operator dodele ima dva argumenta – memorijsku lokaciju na levoj strani simbola = i izraz na desnoj strani. Pogledajte sledeñi odlomak: $a = 27. na primer: $a = -1. Veñ smo spomenuli dva operatora. Znak za oduzimaçe (-) moæete da koristite i kao unarni operator (operator sa jednim argumentom.

Kada izraåunavate vrednost odreœenog izraza. Na primer: $totalqty = 0. Ukoliko znakovna vrednost sadræi slovo “e” ili “E”.$b. . Operatori dodele Veñ ste upoznali osnovni operator dodele (=). Operatori za znakovne vrednosti Veñ ste videli i upotrebili jedini operator za znakovne vrednosti (engl. vrednost pretvorenog znakovnog podatka biñe nula. vrednost izraza $a = 0. Razlog ñemo objasniti kada budemo govorili o operatorima poreœeça u nastavku ovog poglavàa. To omoguñava da napiãete izraze poput: $b = 6 + ($a = 5). $b = 'Auto Parts'. PHP ñe upotrebiti cifre na poåetku teksta da bi izveo vrednost – ako ih nema. Promenàiva $b dobija vrednost 11. Na primer. $result = $a. Za sve operatore dodele uglavnom vaæi sledeñe pravilo: vrednost celog iskaza dodele je vrednost koja je dodeàena operandu na levoj strani. O tom znaku uvek govorite kao o operatoru dodele i åitajte ga kao “dobija vrednost”. Navedeno bi trebalo åitati kao “$totalqty dobija vrednost nula”. kao ãto smo ovde uradili. sliåno drugim operatorima. string operator). tumaåiñe se kao broj u nauånoj notaciji i biñe pretvorena u tip float. je nula. $a = "Bob's ". Operator nadovezivaça znakovnih vrednosti moæete upotrebiti za spajaçe dve znakovne vrednosti. kada zadate: $a + $b vrednost ovog izraza je zbir promenàivih $a i $b. biñe pretvorena u celobrojni tip. Promenàiva $result ñe u tom sluåaju sadræati znakovnu vrednost “Bob’s Auto Parts”. moæete upotrebiti zagrade da biste poveñali prioritet izraåunavaça podizraza.30 Poglavlje 1 Kratak kurs PHP-a Imajte u vidu da se aritmetiåki operatori obiåno primeçuju na brojeve. PHP ñe pokuãati da pretvori znakovnu vrednost u broj. Princip je potpuno isti kao u matematici. otprilike isto kao ãto biste upotrebili operator sabiraça za sabiraçe dva broja. Sliåno tome. u protivnom. Ako ih primenite na znakovne podatke. Rezultujuña vrednost operacije dodele Operator dodele takoœe vraña odreœenu vrednost.

Operatori uveñaça imaju dva efekta – oni prvo poveñavaju tekuñu vrednost. Kao ãto verovatno pretpostavàate. Svaki od çih je skrañenica za izvrãavaçe odreœene operacije nad promenàivom i upisivaça rezultata u tu promenàivu.Vrednost celog izraza je 5 (imajte u vidu da je poåetna vrednost $a izmeçena: rezultat nije samo $a + 1). . echo $a++. Prvo se vrednost $a poveñava za 1. Meœutim. a ne poveñava. sliåni su operatorima += i -=. Vrednost $a posle ovog iskaza je 5.= Ekivalentan izrazu $a = $a + $b $a = $a .2 Kombinovani operatori dodele Upotreba $a += $b $a -= $b $a *= $b $a /= $b $a %= $b $a . ako je ++ posle $a. Tabela 1. koji deluje drugaåije. Kombinovani operatori dodele i çihovi rezultati prikazani su u tabeli 1. Pogledajte ovo: $a=4. efekat je suprotan.Vrednost celog izraza je 4 i vrednost se ispisuje. postoji i skup kombinovanih operatora dodela. Na primer: $a += 5. sliåno se ponaãa i operator --. a zatim je dodeàuju. echo ++$a. koji se tako zove zato ãto se ++ pojavàuje ispred $a. a zatim se poveñava. isto je kao da ste napisali: $a = $a + 5. U drugom redu upotrebàen je prefiksni operator uveñaça. i umaçeça --.= $b Operator += -= *= /= %= . s tim ãto se vrednost $a umaçuje. a zatim se ta uveñana vrednost dodeàuje istoj promenàivoj. tj.$b $a = $a * $b $a = $a / $b $a = $a % $b $a = $a . uz neke specifiånosti. Pogledajte ovo: $a=4. U ovom sluåaju vrednost promenàive $a poveñana je na 5.Operatori 31 Kombinovani operatori dodele Osim jednostavnog operatora dodele. Kombinovani operatori dodele postoje za svaki aritmetiåki operator i za operator nadovezivaça znakovnih vrednosti. to je sufiksni operator uveñaça.2. tekuña vrednost promenàive $a prvo se uåitava i ispisuje. U ovom sluåaju. $b Prefiksno i sufiksno uveñaçe i umaçeçe Prefiksni i sufiksni operatori uveñaça ++. a zatim se vrednost 5 uåitava iz promenàive i ispisuje.

vrednost $b se neñe promeniti. // $a i $b sada su 7 Reference mogu malo da zbune. ali se prekida veza izmeœu $a i vrednosti 7 koja se åuva u memoriji. a false ako nisu. Na primer: $a == $b ispituje da li su vrednosti $a i $b iste. Ovaj izraz se lako brka sa operatorom dodele (=). na sledeñi naåin: unset($a). Uglavnom. Rezultat koji vraña ovaj izraz biñe true ako su jednaki. Ukoliko zatim izmenite vrednost promenàive $a. ampersend). To moæete izmeniti ako poniãtite definiciju jedne od promenàivih. obiåno se pravi kopija prve promenàive. $b = 7. . Operatori poreœeça Operatori poreœeça se koriste za poreœeçe dve vrednosti. $a = 7. Na primer: $a = 5. ali obiåno neñete dobiti ni æeàeni rezultat. Na primer. $b = $a. $a = 7. dva znaka jednakosti) omoguñava da ispitate da li su dve vrednosti jednake. Izrazi u kojima upotrebite te operatore vrañaju logiåku vrednost true ili false. neñe doñi do greãke. Na primer: $a = 5. Poniãtavaçem definicije promenàive $b (7) ne meça se çena vrednost. Navedeni redovi koda prave kopiju vrednosti u promenàivoj $a i smeãtaju je u promenàivu $b.32 Poglavlje 1 Kratak kurs PHP-a Reference Operator referenca (&. ako dve promenàive imaju sledeñe poåetne vrednosti: $a = 5. Operator jednakosti Operator poreœeça (==. u zavisnosti od rezultata poreœeça. koja se smeãta negde drugde u memoriju. Kada se jedna promenàiva dodeàuje drugoj. dok nula odgovara logiåkoj vrednosti false. numeriåke vrednosti razliåite od nule odgovaraju logiåkoj vrednosti true. Imajte u vidu da se referenca ponaãa sliånije drugom imenu nego pokazivaåu. $b = &$a. moæe se koristiti u kombinaciji s operatorima dodele. Ako upotrebite pogreãan operator. // $b je i dalje 5 Kopiraçe moæete da izbegnete pomoñu operatora reference &. I $a i $b upuñuju na isti blok memorije.

Tabela 1. Na primer. Zaãto? Vrednost izraza $a = $b vrednost je dodeàena levoj strani. jer je prva nula celobrojnog tipa. æelite da utvrdite da li je vrednost promenàive $a izmeœu 0 i 100. iskàuåive disjunkcije (XOR) i negacije (NOT). Na primer.4. ali 0 === ’0’ nije. koji vraña true samo ako su oba operanda jednaka i istog tipa. Skup logiåkih operatora i çihova upotreba prikazani su u tabeli 1. disjunkcije (OR). a tip druge nule je znakovni.4 PHP-ovi logiåki operatori Ime negacija koçunkcija Upotreba !$b $a && $b Operator ! && Rezultat Vraña true ako je $b false i obrnuto Vraña true ako su $a i $b true. uveli biste u kôd logiåku greãku koju ñete moæda veoma teãko pronañi. u protivnom vraña false . Uvek proverite kako koristite ova dva operatora i da li ste upotrebili ispravan operator. ãto daje false. koji su prikazani u tabeli 1. ãto je u ovom sluåaju 7. Tabela 1.3. rezultat izraza je true. Ostali operatori poreœeça PHP podræava joã neke operatore poreœeça. Poãto je to vrednost razliåita od nule. To omoguñava operator logiåke koçunkcije (AND): $a >= 0 && $a <=100 PHP podræava logiåke operacije koçunkcije (AND). Upotreba operatora za dodelu umesto operatora za ispitivaçe jednakosti je greãka koja se lako pravi i verovatno ñete je i vi napraviti viãe puta. Ukoliko biste napisali to umesto izraza $a == $b. rezultat poreœeça 0 == ’0’ je true.3 Operatori poreœeça Ime jednako identiåno razliåito nije identiåno razliåito maçe od veñe od maçe od ili jednako veñe od ili jednako Upotreba $a == $b $a === $b $a != $b $a !== $b $a <> $b $a < $b $a > $b $a <= $b $a >= $b Operator == === != !== <> < > <= >= Logiåki operatori Logiåki operatori se koriste za kombinovaçe rezultata logiåkih izraza.Operatori 33 rezultat izraza $a = $b biñe true. Reãeçe je da proverite da li su ispuçena oba uslova: $a >= 0 i $a <= 100. Obratite paæçu na operator identiånosti (===).

5 Operatori nad bitovima Upotreba $a & $b $a | $b ~$a Operator Ime & | ~ ^ << >> Rezultat Bitovi koji su aktivni u $a i $b aktivni su u rezultatu Bitovi koji su aktivni u $a ili $b aktivni su u rezultatu Bitovi koji su aktivni u $a nisu aktivni u rezultatu i obrnuto Bitovi koji su aktivni ili u $a ili u $b ali ne u oba. Operatori nad bitovima prikazani su u tabeli 1.34 Poglavlje 1 Kratak kurs PHP-a Tabela 1.4 PHP-ovi logiåki operatori (nastavak) Ime disjunkcija koçunkcija disjunkcija Upotreba $a || $b $a and $b $a or $b Operator || and or Rezultat Vraña true ako su $a ili $b ili oba true. Oblik mu je sledeñi: uslov ? vrednost ako je uslov ispuçen : vrednost ako nije ispuçen Uslovni operator deluje na sliåan naåin kao jedna od verzija iskaza if-else. aktivni su u rezultatu Pomera bitove $a ulevo za $b mesta Pomera bitove $a udesno za $b mesta koçunkcija disjunkcija negacija iskàuåiva disjunkcija $a ^ $b pomeraçe ulevo pomeraçe udesno $a << $b $a >> $b Ostali operatori Osim operatora koje smo do sada predstavili. O çima ñe viãe reåi biti u poglavàu 6. new i ->. postoje i drugi. Uslovni operator Operator ?: deluje isto kao u C-u. odnosno pristupaçe ålanovima objekata. Zarez se koristi za razdvajaçe argumenata funkcije i stavki na spisku. Dva posebna operatora. ali s niæim prioritetom Operatori and i or imaju niæi prioritet od operatora && i ||. .5. Tabela 1. Operatori nad bitovima Operatori nad bitovima omoguñavaju da ceo broj obraœujete kao grupu bitova koja ga predstavàa u memoriji. koriste se za pravàeçe objekta. Postoje joã tri operatora koje ñemo ukratko opisati. O prioritetima operatora biñe viãe reåi u nastavku ovog poglavàa. ali s niæim prioritetom Isto kao ||. o kome govorimo kasnije u ovom poglavàu. u protivnom vraña false Isto kao &&. U PHP-u verovatno ih neñete åesto upotrebàavati.

greãka se zanemaruje.'</pre>'. åak i ako vas ne zanima aritmetika na kojoj se zasniva to ponaãaçe. Inverzni polunavodnik nije isto ãto i obiåan polunavodnik (apostrof). Sve ãto se nalazi izmeœu inverznih polunavodnika PHP pokuãava da izvrãi kao komandu zadatu na komandnoj liniji servera. Operator izvrãeça Reå je zapravo o dva operatora – paru inverznih polunavodnika (``). u zavisnosti od ocene studenta. $a = @(57/0). moæe se upotrebiti ispred svakog izraza. O çima ñemo detaànije govoriti u poglavàu 18. Na raspolagaçu su i drugi operatori za rad s nizovima. echo '<pre>'.Operatori 35 Jednostavan primer: ($ocena > 5 ? 'Poloæio' : 'Pao').$out. Ekvivalent tome na Windows serveru bilo bi: $out = `dir c:`. Ukoliko na ovaj naåin zanemarite upozoreça o greãkama. Rezultat komande predstavàa vrednost izraza. @.$out. “Upotreba nizova”. Ako upotrebite ovaj operator. Na primer. Operator => moæe se. Na primer. Obe verzije ñe generisati spisak datoteka u direktorijumu i dodeliti ga promenàivoj $out. primeniti i na nizove. u nekim kontekstima. Ako ne gubite iz vida da operator + zbraja skalarne tipove i formira uniju kad se primeni na nizove. Obratite paæçu na to da svaki operator iz tabele 1. delovaçe tog operatora biñe vam sasvim jasno i logiåno. obiåno se nalazi na istom tasteru gde i simbol ~. Bez operatora @. echo '<pre>'. Operator zanemarivaça greãke Operator zanemarivaça greãke. trebalo bi da napiãete kôd za obradu greãaka. Postoje i drugi naåini izvrãavaça komandi na serveru. Ovaj izraz dodeàuje 'Poloæio' ili 'Pao'. koji su takoœe detaàno opisani u poglavàu 3. Ako je ukàuåena konfiguracijska opcija track_errors. u operativnim sistemima tipa Unix moæete da upotrebite: $out = `ls -la`.6 ima odgovarajuñi ekvivalent koji deluje na promenàive skalarnog tipa.'</pre>'. a ovde ih navodimo samo radi informacije. Operatori za rad s nizovima opisani su u poglavàu 3. Operator za element niza ([]) omoguñava pristup pojedinim elementima niza. Operatori za rad s nizovima Postoji viãe operatora za rad s nizovima. . tekst poruka o greãci nalaziñe se u globalnoj promenàivoj $php_errormsg. izvrãno okruæeçe bi generisalo upozoreçe “delite nulom”.

define('OILPRICE'.2). 100). kao u sledeñem primeru: class nekaKlasa{}. $totalamount = $tireqty * TIREPRICE + $oilqty * OILPRICE + $sparkqty * SPARKPRICE. if (nekiObjekat instanceof nekaKlasa) echo "nekiObjekat je primerak klase nekaKlasa". // stopa poreza je 10% $totalamount = $totalamount * (1 + $taxrate). <> $b Vraña true ako je $a razliåit od $b. echo 'Items ordered: '. Operator za utvrœivaçe tipa Za utvrœivaçe tipa objekta postoji samo jedan operator: instanceof. (Objektno orijentisano programiraçe opisano je u poglavàu 6. echo 'Subtotal: $'.'<br />'.'<br />'.2).number_format($totalamount. !== $b Vraña true ako $a nije identiåan $b. Vraña true ako $a i $b imaju jednake elemente. 10). Na kraj PHP skripta dodajte sledeñi blok koda: $totalqty = 0.$totalqty. . Koristi se u objektno orijentisanom programiraçu. $totalamount = 0. echo 'Total including tax: $'.number_format($totalamount. $totalqty = $tireqty + $oilqty + $sparkqty. moæete izraåunati ukupan iznos i iznos poreza u porudæbini.36 Poglavlje 1 Kratak kurs PHP-a Tabela 1.10. define('SPARKPRICE'. a ovde ga pomiçemo samo radi informacije.00. Upotreba operatora: izraåunavaçe ukupnog iznosa na obrascu Poãto sada znate kako da koristite operatore u PHP-u. define('TIREPRICE'. nekiObjekat = new nekaKlasa(). === $b Vraña true ako $a i $b imaju jednake elemente u jednakom redosledu. $taxrate = 0.6 PHP-ovi operatori za rad s nizovima Ime unija jednako identiåno razliåito razliåito nije identiåno Upotreba $a + $b $a = $b $a $a $a $a Operator + == === != <> !== Rezultat Vraña niz koji se sastoji od svih elemenata $a i $b.) Operator instanceof omoguñava da ispitate da li je odreœeni objekat primerak (instanca) zadate klase.'<br />'. != $b Vraña true ako je $a razliåit od $b. 4).

Prioriteti i asocijativnost: izraåunavaçe izraza 37 Ako osveæite stranicu u prozoru åitaåa. ili nije bitna (u tabeli n\b).5. dakle u redosledu çihovog izraåunavaça.5 Ukupan iznos je izraåunat. Izgleda da je ukupan zbir taåan. ali zaãto su mnoæeça izvrãena pre sabiraça? Odgovor je u prioritetima operatora. Ako paæàivo pogledate izraze. Pogledajte. To je funkcija iz PHP-ove biblioteke Math.) – za definisaçe rezultata. na primer. upotrebili smo nekoliko operatora: operatore sabiraça (+) i mnoæeça (*) – za izraåunavaçe zbira. trebalo bi da vidite rezultat nalik na onaj sa slike 1. Slika 1. Prioriteti i asocijativnost: izraåunavaçe izraza Svaki operator ima odreœeni prioritet. formatiran i prikazan. Operatori takoœe imaju asocijativnost. . Osim toga. sledeñi iskaz: $totalamount = $tireqty * TIREPRICE + $oilqty * OILPRICE + $sparkqty * SPARKPRICE. tj. zdesna nalevo (skrañeno desna). upotrebili smo funkciju number_format za formatiraçe zbira. moæda ñete se zapitati zaãto su raåunati baã tim redosledom. ili redosled kojim se izraåunava. Asocijativnost moæe biti sleva nadesno (skrañeno se naziva leva). i operator nadovezivaça (. Kao ãto vidite. redosled kojim se operatori jednakog prioriteta izraåunavaju.

buduñi da ima viãi prioritet od operacije sabiraça.(int) (double) (string) (array) (object) @ [] new () Asocijativnost leva leva leva leva desna leva leva leva leva leva leva leva n/b n/b leva leva leva desna desna n/b n/b Obratite paæçu na to da joã nismo pomenuli operator s najviãim prioritetom: obiåne zagrade. Zagrade åine da se prvo izraåunava podizraz 1 + $taxrate.= %= &= |= ^= ~= <<= >>= ? : || && | ^ & == != === < <= > >= << >> + . prvo bi se izvrãila operacija mnoæeça.7 Prioritet operatora Operatori . usled åega biste dobili pogreãan rezultat. Pomoñu çih moæete namerno da zaobiœete pravila prioriteta kad je potrebno. * / % ! ~ ++ -. a uvek ñe se prvo izraåunavati one koje su najdubàe ugneæœene.38 Poglavlje 1 Kratak kurs PHP-a Tabela 1. Da ste napisali: $totalamount = $totalamount * 1 + $taxrate. Tabela 1. U izrazu moæete upotrebiti neograniåen broj zagrada. . Pogledajte ovaj deo prethodnog primera: $totalamount = $totalamount * (1 + $taxrate). U ovoj tabeli.. operatori pri vrhu imaju najmaçi prioritet. a on raste ka dnu tabele. One deluju tako ãto poveñavaju prioritet svega ãto se nalazi izmeœu çih. or xor and print = += -= *= /= .7 prikazuje prioritete i asocijativnost operatora.

Funkcije za rad s promenàivama Pre nego ãto napustimo svet promenàivih i operatora. Argumenti koji mogu imati viãe tipova podataka navedeni su kao pseudo-tip mixed. Funkcija settype() meça tip promenàive koju joj prosledite u novi tip naveden u obliku znakovne vrednosti u drugom argumentu. pogledañemo PHP-ove funkcije za rad s promenàivama. mnoge funkcije prihvataju ulazne argumente viãe razliåitih tipova podataka (ili åak sve). Kada print pozovete u obliku funkcije. Napomena U ovoj kçizi i u php. integer. 'double'). ali slobodno koristite print ako ste navikli na tu komandu. ali se obe mogu pozivati kao funkcije s parametrima zadatim izmeœu zagrada. ni print nije prava funkcija. Obe komande generiãu izlazne podatke. double (za vrednosti s pokretnim zarezom). settype($a. Ta moguñnost je korisna kada æelite da generiãete odreœene izlazne podatke unutar nekog sloæenijeg izraza. One imaju sledeñe prototipove – prototipovi opisuju koje argumente funkcija oåekuje i ãta vraña: string gettype(mixed promenàiva). string array.net dokumentaciji pomiçe se tip podataka mixed. Ni echo. echo gettype($a). ali buduñi da je PHP tako fleksibilan pri obradi tipova podataka. koje moæe biti boolean. dobijate povratnu vrednost (1). . echo gettype($a). Funkcija gettype() utvrœuje tip promenàive koju joj prosledite i vraña znakovnu vrednost s imenom tipa. Ispitivaçe i meçaçe tipova promenàivih Veñina funkcija za rad s promenàivama sluæi za ispitivaçe tipova podataka. tip). Dve najopãtije funkcije su gettype() i settype(). funkcija vraña tekst uknown type. a to je komanda jezika PHP. Obe se mogu smatrati i operatorima: tekst na koji one treba da deluju napiãite iza rezervisane reåi echo ili print. Takav tip podataka zapravo ne postoji. print. Ako to nije nijedan od standardnih tipova. object.'<br />'. koja je ekvivalentna komandi echo. Postoji biblioteka funkcija koja omoguñava da na razne naåine obraœujete i ispitujete promenàive.Funkcije za rad s promenàivama 39 Obratite paæçu na joã jedan operator koji nismo pomenuli. int settype (mixed promenàiva. resource ili NULL. U ovoj kçizi najåeãñe koristimo echo.To moæe biti jedan od tipova sa prethodne liste. ali to znaåi da ñe print biti neznatno sporija od komande echo.'<br />'. Primer upotrebe funkcija: $a = 56.

Postoje i funkcije za ispitivaçe tipova podataka. '. is_integer (sve je to ista funkcija) is_string is_object is_resource() is_null() is_scalar() . is_real (sve je to ista funkcija) is_long.Ispituje da li je promenàiva skalarnog tipa. a u suprotnom vraña false.'<br>'. '.isset($nothere).Ispituje da li je vrednost promenàive ime postojeñe funkcije. Pogledajmo primer u kojem se koriste navedene funkcije. Argument svake je promenàiva i svaka vraña logiåku vrednost. Funkciji moæete proslediti i listu imena promenàivih razdvojenih zarezima. Nakon pozivaça funkcije settype. Funkcija unset poniãtava definiciju promenàive koju joj prosledite.'<br>'. is_numeric(). Te funkcije su: is_array is_double. i vraña true ili false. promenàiva $a je celobrojnog tipa. tj. Ispitivaçe staça promenàive Postoji nekoliko funkcija za ispitivaçe staça promenàive. Funkcija empty ispituje da li promenàiva postoji i da li ima vrednost koja nije nula odnosno nije prazna. tip promenàive $a je promeçen u double.empty($nothere). logiåkog ili znakovnog tipa. Funkcija isset vraña true ako je promenàiva definisana.empty($tireqty).'<br>'. Osveæite stranicu da biste videli rezultat. Definiciju promenàive moæete da poniãtite pomoñu funkcije unset koja ima sledeñi prototip: void unset(mixed promenàiva). is_callable . is_int. da li je u pitaçu podatak numeriåkog. Funkcija empty ima sledeñi prototip: boolean empty(mixed var).'<br>'.40 Poglavlje 1 Kratak kurs PHP-a U prvom pozivu funkcije gettype. Funkcija isset ima sledeñi prototip: boolean isset(promenàiva).Ispituje da li je promenàiva bilo koja vrsta broja ili znakovna vrednost koja se moæe pretvoriti u broj. is_float. a isset ñe vratiti true ako su definisane sve promenàive na listi. Skriptu privremeno dodajte sledeñi kôd: echo echo echo echo 'isset($tireqty): 'isset($nothere): 'empty($tireqty): 'empty($nothere): '.isset($tireqty). . '.

a rezultat funkcije empty biñe true. Ponovno interpretiraçe promenàivih Sledeñe tri funkcije imaju isti efekat kao konverzija promenàive: int intval(mixed promenàiva[. Na primer. rezultat funkcije isset biñe false. izvrãava se blok koda koji sledi iskazu if – u suprotnom biñe preskoåen. stranica bi mogla da prikaæe neku korisniju poruku. moæete da ga obavestite “Niste niãta naruåili”. int baza]). Iskaz if Iskaz if moæete da upotrebite za donoãeçe odluke u zavisnosti od odreœenog uslova. kada korisnik ne popuni obrazac kako treba i pritisne dugme Submit Order. float floatval(mixed promenàiva). na primer. Ako je uslov ispuçen.) Upravàaåke strukture Upravàaåke strukture omoguñavaju upravàaçe tokom izvrãeça programa ili skripta. umesto obaveãteça korisniku da je çegova porudæbina prihvañena. (Tako moæete da konvertujete. konvertovanu u odgovarajuñi tip (redom: u ceo broj. U narednim odeàcima opisañemo te PHP-ove strukture.Donoãeçe odluka u uslovnim strukturama 41 Trebalo bi da za promenàivu $tireqty funkcija isset vrati 1 (true) bez obzira na vrednost koju ste uneli u to poàe u obrascu. Grupisali smo ih u uslovne (strukture s granaçem) i strukture s ponavàaçem ili petàe. kôd mora donositi odluke. string strval(mixed promenàiva). pa åak i ako niste niãta uneli. Kada posetilac ne naruåi niãta. heksadecimalne vrednosti u celobrojne. Konstrukcije koje programu omoguñavaju da donosi odluke nazivaju se uslovne strukture. To se lako postiæe sledeñim iskazom if: if( $totalqty == 0 ) echo 'You did not order anything on the previous page!<br />'. Uslove u iskazima if morate napisati izmeœu zagrada. To moæe biti korisno ako æelite da proverite da li je korisnik popunio odgovarajuña poàa u obrascu. Kada je ulazna promenàiva znakovnog tipa. Donoãeçe odluka u uslovnim strukturama Ako æelite da smisleno obradite podatke koje je korisnik uneo.Vrednost koju ñe vratiti funkcija empty zavisi od toga ãta ste uneli. Sve tri funkcije vrañaju vrednost prosleœene promenàive. u realan broj i u znakovnu vrednost). Buduñi da promenàiva $nothere ne postoji. . funkcija intval omoguñava da zadate bazu ciànog sistema u koji konvertujete argument.

iskaze koji su grupisani u blokove i iskaze koji su deo petài ili funkcija. if( $totalqty == 0 ) { echo 'You did not order anything on the previous page!<br />'. Uvlaåeçe se obiåno primeçuje da biste lakãe uoåili redove koji ñe biti izvrãeni ako su ispuçeni uslovi. Kada uslov ima vrednost true. moæete grupisati iskaze u blok. echo $oilqty. Uslov $totalqty == 0 biñe ispuçen ako je $totalqty nula. moñi ñete da prikaæete upozoreçe ili opis naruåenog. Napomena Kao ãto smo veñ rekli. Ako drugaåije rasporedite kôd i dodate jedan iskaz else. trebalo bi da uvlaåite iskaze. Kada uslov nije ispuçen. U prethodnim primerima vidite da je uvuåen iskaz koji zavisi od iskaza if i iskazi koji åine blok. } else { echo $tireqty. } . nego morate zadati koja grupa od viãe moguñih akcija treba da se izvede. uslov ñe biti false. Blokovi naredaba Åesto unutar jednog uslovnog iskaza. ne izvrãava se nijedan. S druge strane. Iskaz else omoguñava da definiãete alternativnu akciju koju treba preduzeti ako uslov iskaza if nije ispuçen. stavite je u vitiåaste zagrade: if( $totalqty == 0 ) { echo '<font color=red>'. Iskazi else Åesto vaàa odluåiti ne samo da li odreœena akcija treba da se izvede. } Tri reda unutar vitiåaste zagrade sada åine blok. Ne zaboravite da se operator jednakosti (==) ponaãa drugaåije od operatora dodele (=). Kada je uslov ispuçen. treba da se izvrãi viãe iskaza.' tires<br />'. Radi boàe åitàivosti. echo $sparkqty. biñe izvrãen iskaz echo. echo '</font>'. æelite da upozorite korisnike da nisu niãta naruåili. ako naruåe neãto. æelite da im umesto upozoreça prikaæete to ãto su naruåili.' bottles of oil<br />'. Umesto toga.42 Poglavlje 1 Kratak kurs PHP-a Uslov koji smo ovde zadali je $totalqty == 0. Nema potrebe da se ispred svakog stavàa nov iskaz if. echo 'You did not order anything on the previous page!<br />'. Ako $totalqty nije nula. Na primer. kao ãto je if. Da biste grupu iskaza deklarisali kao blok.' spark plugs<br />'. izvrãavaju se sva tri. PHP zanemaruje praznine u kodu.

Reå elseif moæete da kucate tako ili s razmakom (else if) – oba oblika su ispravna. if( $tireqty < 10 ) $discount = 0. Dva uslova kombinujete u jedan pomoñu operatora koçunkcije (&&).5% popusta 50-99 kupàenih guma – 10% popusta 100 ili viãe kupàenih guma – 15% popusta Moæete da napiãete kôd koji izraåunava popust pomoñu uslova i iskaza if i else. Kada zadate viãe uslova. } else { if ( $tireqty>0 ) echo $tireqty. Bob daje popust: Maçe od 10 kupàenih guma .' bottles of oil<br />'. U sledeñem primeru ñe saæetak biti prikazan jedino ako je uslov $totalqty == 0 ispuçen. Ako nadovezujete viãe iskaza elseif. imajte u vidu da ñe samo jedan blok ili iskaz biti izvrãeni. Ako su uslovi takvi da viãe çih moæe biti istovremeno ispuçeno. if( $totalqty == 0) { echo 'You did not order anything on the previous page!<br />'. if ( $sparkqty>0 ) echo $sparkqty. } Iskazi elseif Za mnoge odluke koje donosite postoje viãe od dve opcije. a svaki red saæetka prikazuje se samo ako je ispuçen uslov za çega. elseif( $tireqty >= 50 && $tireqty <= 99 ) $discount = 10. Pomoñu iskaza elseif moæete da napravite redosled obrade viãe opcija. Za veñe porudæbine guma.' spark plugs<br />'. . izvrãava se samo blok ili iskaz iza prvog ispuçenog uslova. elseif( $tireqty >= 100 ) $discount = 15. To u ovom primeru nije bilo vaæno zato ãto su svi uslovi bili uzajmno iskàuåivi – samo jedan moæe biti ispuçen. Taj iskaz je kombinacija iskaza else i if.' tires<br />'. program moæe da ispituje svaki uslov po zadatom redosledu dok ne naœe onaj koji je ispuçen.Donoãeçe odluka u uslovnim strukturama 43 Sloæenije logiåke procese moæete da gradite tako ãto ñete jedne iskaze if smeãtati unutar drugih. elseif( $tireqty >= 10 && $tireqty <= 49 ) $discount = 5. if ( $oilqty>0 ) echo $oilqty.nema popusta 10-49 kupàenih guma .

6. 'c' . <tr> <td>How did you find Bob's</td> <td><select name="find"> <option value = "a">I'm a regular customer</option> <option value = "b">TV advertising</option> <option value = "c">Phone directory</option> <option value = "d">Word of mouth</option> </select> </td> </tr> Slika 1. U iskazu switch uslov moæe imati viãe razliåitih vrednosti. uslov moæe biti samo true ili false. podrazumevani iskaz case za sve ostale vrednosti. Za svaku vrednost koju æelite da obradite treba da napiãete iskaz case i. string ili float). 'b'.44 Poglavlje 1 Kratak kurs PHP-a Iskaz switch Iskaz switch deluje sliåno kao iskaz if. treba da dodate jedno pitaçe na narudæbenicu.6 U narudæbenici pitamo posetioce kako su pronaãli prodavnicu. eventualno. U iskazu if. Poãto Bob æeli da zna koja reklama privlaåi najviãe kupaca. koje moraju biti skalarnog tipa (integer. Ubacite sledeñi HTML kôd u obrazac narudæbenice. da bi izgledao kao na slici 1. Navedeni HTML blok dodao je novu promenàivu obrasca åija ñe vrednost biti ili 'd'. ali omoguñava da uslov ima viãe od dve vrednosti. Tu promenàivu moæete da obradite nizom iskaza if i else na sledeñi naåin: 'a'.

break. elseif($find == 'b') echo '<p>Customer referred by TV advert. case 'd' : echo '<p>Customer referred by word of mouth.</p>'. Ne postoji niãta ãto moæete da uradite s jednim ili viãe iskaza else. izvrãavaçe se nastavàa od reda koda iza iskaza switch. Na to pitaçe ne moæemo da odgovorimo.</p>'. break. moæda se sada pitate: “Koji je najboài?”. .</p>'. Bez iskaza break. case 'b' : echo '<p>Customer referred by TV advert. Poreœeçe uslovnih iskaza Ako vam iskazi opisani u prethodnim odeàcima nisu mnogo bliski.) Iskaz switch se ponaãa malo drugaåije od iskaza if i else. Druga moguñnost je da napiãete iskaz switch switch($find) { case 'a' : echo '<p>Regular customer. Iskaz switch se ponaãa drugaåije. default : echo '<p>We do not know how this customer found us. else echo '<p>We do not know how this customer found us. a ne moæete sa skupom iskaza if. elseif ili switch.<p>'. osim kada upotrebite vitiåaste zagrade da biste napravili blok iskaza.</p>'. S vremenom ñete steñi iskustvo i oseñaj koji iskaz treba da upotrebite. case 'c' : echo '<p>Customer referred by phone directory. elseif($find == 'c') echo '<p>Customer referred by phone directory. PHP izvrãava iskaze od odgovarajuñe oznake case do iskaza break.</p>'. Iskaz if deluje na samo jedan iskaz.</p>'. break.</p>'. Trebalo bi da pokuãate da koristite uslovne iskaze koji se u datom sluåaju najlakãe åitaju.</p>'. } (Imajte u vidu da se u oba primera podrazumeva da ste promenàivu $find uåitali iz niza $_POST. izvrãavaju se svi iskazi iza odgovarajuñe oznake case. break. Kada se doœe do iskaza break.</p>'.Donoãeçe odluka u uslovnim strukturama 45 if($find == 'a') echo '<p>Regular customer. elseif($find == 'd') echo '<p>Customer referred by word of mouth. break.

html – HTML kôd za tabelu troãkova transporta <html> <body> <table border="0" cellpadding="3"> <tr> <td bgcolor="#CCCCCC" align="center">Distance</td> <td bgcolor="#CCCCCC" align="center">Cost</td> </tr> <tr> . Listing 1. Listing 1. Ako postoji neãto ãto treba na isti naåin da se uradi mnogo puta.2 sadræi HTML kôd koji prikazuje ovu tabelu i koji je.46 Poglavlje 1 Kratak kurs PHP-a Petàe: ponavàaçe akcija Raåunari su oduvek bili veoma dobri za jednu primenu – automatizovaçe radçi koje se ponavàaju. Tabela treba da izgleda kao na slici 1. moæete da upotrebite petàu za ponavàaçe odreœenog bloka koda u programu. dugaåak i sadræi delove koji se ponavàaju.2 freight. kao ãto vidite.7.7 Ova tabela prikazuje kako troãkovi transporta rastu i s poveñaçem razdaàine. Troãkovi transporta zavise od razdaàine koju paket treba da preœe i izraåunavaju se po jednostavnoj formuli. Slika 1. Bob æeli da prikaæe tabelu sa troãkovima transporta koji ñe biti ukàuåeni u cenu naruåene robe.

a petàa while izvrãava blok dokle god je uslov ispuçen."<br />". $num++. kao ãto je prikazivaçe tabele transportnih troãkova (slika 1. Petàa while while je najjednostavnija vrsta petàe u PHP-u. . a ne åovek kome treba platiti i kome brzo postane dosadno. while( uslov ) izraz. Kada je broj ciklusa unapred poznat. koristi se petàa for.7). izraz neñe biti izvrãen i petàa ñe se zavrãiti. Obiåno koristimo petàu while kada ne znamo unapred koliko ñe iteracija biti potrebno. $num = 1. Ako uslov nije ispuçen. ona zavisi od uslova. Osnovna struktura petàe while je: Sledeña petàa while prikazañe brojeve od 1 do 5. Petàe nalaæu PHP-u da ponavàa iskaze ili blokove iskaza. } Na poåetku svake iteracije ispituje se uslov. while ($num <= 5 ) { echo $num. Razlika izmeœu petàe while i iskaza if leæi u tome ãto iskaz if izvrãava blok koda ako je uslov ispuçen. Kao i iskaz if. a zatim se prelazi na iskaz koji sledi iza petàe. Petàu tipa while moæete da upotrebite za neãto korisnije.Petàe: ponavàaçe akcija 47 <td align="right">50</td> <td align="right">5</td> </tr> <tr> <td align="right">100</td> <td align="right">10</td> </tr> <tr> <td align="right">150</td> <td align="right">15</td> </tr> <tr> <td align="right">200</td> <td align="right">20</td> </tr> <tr> <td align="right">250</td> <td align="right">25</td> </tr> </table> </body> </html> Bilo bi korisno kada bi se za generisaçe HTML koda upotrebàavao jeftin i neumoran raåunar.

U çemu obiåno zadajete poåetnu vrednost brojaåa. Kao ãto je veñ reåeno. Osnovna struktura petàe for je: for( izraz1. åitaåi ñe zanemariti te znake. } ?> </table> </body> </html> Da bi generisani HTML kôd bio åitàiv. U listingu 1. $distance += 50. izraz1 . izraz2) izraz3.48 Poglavlje 1 Kratak kurs PHP-a U listingu 1. On obiåno meça vrednost brojaåa. Na kraju svake iteracije meçamo brojaå. $distance / 10 .3 videñete \n. while ($distance <= 250 ) { echo "<tr>\n <td align"='right'>$distance</td>\n".3 freight. Petàe for i foreach Naåin na koji smo upotrebili petàu while u prethodnom odeàku veoma je uobiåajen.3 koristi se petàa while za pravàeçe tabele transportnih troãkova. Kada je pod navodnicima. Åesto ñete morati da pregledate generisani HTML kôd ako ne dobijate ono ãto ste oåekivali. uslov se ispituje pre svake iteracije. ali su za àude oni vaæni. izraz3 se izvrãava jednom u svakoj iteraciji. se izvrãava jednom na poåetku. izvrãavaçe petàe prestaje. Ako nije ispuçen. U uslovu obiåno ispitujete da li je brojaå doãao do odreœene granice.Taj izraz je obiåno blok koda i sadræi najveñi deo koda petàe. mora da sadræi znakove za nov red i razmake. Takvu vrstu petàe moæete da napiãete i u saæetijem obliku pomoñu petàe for."</td>\n</tr>\n". Prvo zadamo poåetnu vrednost brojaåa i onda pre svake iteracije ispitujemo taj brojaå u uslovu. taj niz znakova predstavàa znak za novi red. uslov.php – izrada tabele troãkova transporta u PHP-u <body> <table border="0" cellpadding="3"> <tr> <td bgcolor="#CCCCCC" align="center">Distance</td> <td bgcolor="#CCCCCC" align="center">Cost</td> </tr> <?php $distance = 50. echo " <td align='right'>". Listing 1. izraz2 se izvrãava na kraju svake iteracije.

'<br />'. Osim petàe for. echo $$temp. $distance += 50) { echo "<tr>\n <td align='right'>$distance</td>\n". Te petàe su ravnopravne – nema boàe i loãije. Petàa for je neãto saæetija jer je kraña za dva reda. na primer.. do { echo $num. O çenoj upotrebi govoriñemo u poglavàu 3.3 sada moæete da napiãete kao petàu for: <?php for($distance = 50.while iskaz ili blok unutar petàe uvek izvrãavaju najmaçe jednom.while se razlikuje od petàe while zbog toga ãto se uslov ispituje na kraju. echo " <td align='right'>".To znaåi da se u petài do. $distance <= 250. name3 itd. } ?> Obe verzije koda. } while ($num < 1 ).. Petàe do.. Koristite onu koja viãe odgovara.while Posledçi tip petàe koji ñemo spomenuti ponaãa se neãto drugaåije. Petàa do. . while( uslov ). Ako se. funkcionalno su identiåne.. for i while. Napomenimo da moæete kombinovati promenàive promenàivih s petàom for radi iteracije kroz niz poàa obrasca.. // obraœivaçe vrednosti iz poàa } Kada dinamiåki generiãete imena promenàivih. $i <= $numnames. $distance / 10 .'<br />'. moæete redom da pristupite svakom poàu. $num = 100.Petàe: ponavàaçe akcija 49 Petàu while iz listinga 1.while je: do izraz. “Upotreba nizova”. petàa ñe biti izvrãena jednom pre nego ãto ispita uslov i zavrãi se. nameçena radu s nizovima. Opãta struktura petàe do. Åak i ako na poåetku uslov nije ispuçen i ako nikada ne moæe da bude ispuçen. postoji i petàa foreach. poàa zovu name1. moæete da ih obradite u petài na sledeñi naåin: for ($i=1. name2."</td>\n</tr>\n". $i++) { $temp= "name$i".

To je obiåno korisno kada se utvrdi greãka. endfor ili endforeach. Struktura declare Jedna od PHP-ovih upravàaåkih struktura koja se ne koristi tako åesto kao druge. Na primer: if( $totalqty == 0) { echo 'You did not order anything on the previous page!<br />'. } moæe se drugaåije napisati u sledeñem obliku: if( $totalqty == 0): echo 'You did not order anything on the previous page!<br />'. Opãti oblik te strukture izgleda ovako: declare (direktiva) { // blok } . exit. endswitch. Da biste prekinuli izvrãavaçe celog PHP skripta. Ako u petài koristite iskaz break. exit. Ako æelite da zapoånete novu iteraciju petàe. endwhile. u kojem se poåetna vitiåasta zagrada ({) zameçuje dvotaåkom (:). jeste struktura declare. izvrãeçe skripta ñe se nastaviti od prvog reda iza petàe. sledeñi blok koda: if( $totalqty == 0) { echo 'You did not order anything on the previous page!<br />'. } Iskaz exit prekida izvrãavaçe skripta. Upotreba alternativnih oblika sintakse za upravàaåke strukture Za sve upravàaåke strukture koje smo opisali postoji alternativni oblik sintakse. a zavrãna vitiåasta zagrada (}) zameçuje se novom kàuånom reåju koja ñe biti endif. upotrebite komandu exit. u zavisnosti od toga toga koja je upravàaåka struktura u pitaçu. endif. exit. upotrebite iskaz break. kao ãto smo naveli u odeàku o iskazu switch. Na primer.50 Poglavlje 1 Kratak kurs PHP-a Izlazak iz upravàaåke strukture Postoje tri naåina da prekinete izvrãavaçe bloka koda: Da biste prekinuli izvrãeçe petàe. upotrebite iskaz continue.

. ãto je korisno prvenstveno pri ispitivaçu performansi ili otkrivaçu greãaka. “Otklaçaçe greãaka”. Upravàaåku strukturu declare pomiçemo na ovom mestu samo radi informacije. Ãta sledi Sada znate kako da primite porudæbinu i radite s çom. “Upotreba PHP-a i MySQL-a u veñim projektima” i 25. nañi ñete primere upotrebe funkcije tick. Zadaje se u obliku ticks=n i znaåi da se unutar bloka koda izvrãava odreœena funkcija u svakom n-tom redu bloka. pravila o tome kako treba da se izvrãi kôd koji sledi. tj.Ãta sledi 51 Ta struktura omoguñava da zadate direktive za izvrãavaçe bloka koda. U sledeñem poglavàu nauåiñete da saåuvate porudæbinu tako da ona kasnije moæe da se uåita i obradi. U poglavàima 24. Zasad je na raspolagaçu samo jedna izvrãna direktiva. ticks.

Sign up to vote on this title
UsefulNot useful