kratak kurs php-a snimaçe i åitaçe podataka upotreba ... · ako veñ programirate na php-u, ono...

38
E03B , June 21, 2004 9:36 am I PHP 1 Kratak kurs PHP-a 2 Snimaçe i åitaçe podataka 3 Upotreba nizova 4 Znakovni nizovi i regularni izrazi 5 Ponovna upotreba koda i pisaçe funkcija 6 Objektno orijentisani PHP

Upload: others

Post on 01-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B

, June 21, 2004 9:36 am

I

PHP

1

Kratak kurs PHP-a

2

Snimaçe i åitaçe podataka

3

Upotreba nizova

4

Znakovni nizovi i regularni izrazi

5

Ponovna upotreba koda i pisaçe funkcija

6

Objektno orijentisani PHP

Page 2: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,
Page 3: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B

, June 21, 2004 9:36 am

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 neke praznine u znaçu a ako ste ranije koristili C, ASP 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 naãim lokacijama za elek-tronsku 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 navedene primere – otkucajte ih ili ih uåitajte sa CD-a, meçajte ih, rastavàajte i uåite kako da ih popravite.

Poåeñemo primerom narudæbenice u kome ñ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 kako da pristupate promenàivama obrasca izraåunavajuñi ukupnu cenu i porez na porudæbinu.

Zatim ñemo napraviti PHP skript da bismo proverili ulazne podatke. Prikazañemo logiåke vrednosti i komande

if

,

else

, operator

?:

i iskaz

switch

.Konaåno, napisañemo petàe koje prave HTML tabele.U najvaænije teme obraœene u ovom poglavàu spadaju:

n

Ugradça PHP-a u HTML

n

Dodavaçe dinamiåkog sadræaja

n

Pristup promenàivama obrasca

n

Identifikatori

n

Promenàive

n

Tipovi promenàivih

n

Dodela vrednosti promenàivama

Page 4: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B

, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a

12

n

Konstante

n

Oblast vaæeça promenàivih

n

Operatori i prioriteti

n

Izrazi

n

Funkcije

n

Donoãeçe odluka pomoñu iskaza

if

,

else

i

switch

n

Iteracija:

while

,

do

i petàe

for

Upotreba PHP-a

Za izvrãavaçe primera u ovom poglavàu i u ostatku kçige, morate imati pristup Web serveru s PHP-om. Da biste na primerima nauåili ãto viãe, trebalo bi da ih pokrenete i pokuãate da ih izmenite. Za to ñe vam biti potreban server na kojem ñete eksperi-mentisati.

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. 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”. Kompletan kôd za primere upotrebàene u ovom poglavàu nalazi se na prateñem disku u direktorijumu “chapter1”.

Narudæbenica

Web dizajner je napravio narudæbenicu za auto-delove, koja je prikazana na slici 1.1. To je relativno jednostavna narudæbenica, sliåna mnogima koje ste do sada verovatno sretali na Webu. Bob bi prvo æeleo da moæe da zna ãta su çegove muãterije naruåile, da izraåuna ukupnu cenu naruåene robe i iznos poreza na tu robu.

Deo HTML koda narudæbenice prikazan je u listingu 1.1. U tom kodu treba uoåiti dve vaæne stvari.

Listing 1.1

orderform.html – HTML za osnovnu narudæbenicu

<form action="processorder.php" method=post><table border=0><tr bgcolor=#cccccc> <td width=150>Item</td> <td width=15>Quantity</td></tr>

Page 5: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B

, June 21, 2004 9:36 am

Probna aplikacija: Bobovi auto-delovi

13

<tr> <td>Tires</td> <td align="center"><input type="text" name="tireqty" size="3" maxlength="3"></td></tr><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>

Prvo treba uoåiti da je u atributu

ACTION

oznake obrasca naveden PHP skript koji ñe obraditi porudæbinu (kasnije ñemo napisati taj skript). Vrednost atributa

ACTION

je URL koji ñe biti uåitan kada korisnik pritisne dugme “submit”. Podaci koje je kori-snik uneo u obrazac biñe poslati stranici na toj adresi metodom zadatom u atributu

METHOD

. To ñe biti metoda

GET

(dodaje podatke na kraj URL-a) ili metoda

POST

(podaci se ãaàu zasebno).

Slika 1.1 Poåetna narudæbenica beleæi samo proizvode i koliåine.

Page 6: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B

, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a

14

Sledeñe ãto treba uoåiti jesu imena poàa u obrascu –

tireqty

,

oilqty

i

sparqty

. Ta imena ñemo ponovo upotrebiti u PHP skriptu. Zbog toga je vaæno da poàima u obrascu date smislena imena kojih ñete se lako setiti dok budete pisali PHP skript. Neki pro-grami za Web dizajn daju poàima podrazumevana imena, kao ãto je na primer

field23

, koja se teãko pamte. Ako imena poàa odraæavaju unete podatke, lakãe ñete programirati.

Moæda bi vredelo da razmotrite i usvajaçe standarda za imena poàa, koji ñete pri-meçivati na svim stranicama. Na taj naåin ñe vam biti lakãe da zapamtite da li ste, na primer, u imenu poàa skratili reå ili ste umesto razmaka stavili znak za podvlaåeçe.

Obrada obrasca

Da bismo obradili obrazac, treba da napravimo skript pomenut u atributu

ACTION

oznake

FORM

. Taj skript ñe se zvati

processorder.php

. U programu za ureœivaçe tek-sta napravite tu datoteku. Otkucajte sledeñi kôd:

<html><head> <title>Bob's Auto Parts - 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 smo do sada otkucali samo obiåan HTML. Vreme je da dodate neãto jednostavnog PHP koda u skript.

Ugradça PHP-a u HTML

Ispod naslova

<h2>

u datoteci, dodajte sledeñe redove:

<?php echo '<p>Order processed.</p>';?>

Snimite datoteku i pogledajte je u åitaåu Weba tako ãto ñete ispuniti obrazac i priti-snuti dugme “Submit Order”. Trebalo bi da se pojavi neãto kao na slici 1.2.

Obratite paæçu na to da je PHP kôd naredaba koji ste napisali bio ugraœen u obiånu HTML datoteku. Pogledajte izvorni kôd stranice u åitaåu Weba. Trebalo bi da vidite neãto sliåno sledeñem:

<html><head> <title>Bob's Auto Parts - Order Results</title></head><body><h1>Bob's Auto Parts</h1><h2>Order Results</h2><p>Order processed.</p></body></html>

Page 7: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B

, June 21, 2004 9:36 am

Ugradça PHP-a u HTML

15

PHP naredbe se ne vide zato ãto je prevodilac za PHP zamenio naredbe rezultatom. To znaåi da se iz PHP-a dobija åist HTML, koji se moæe gledati svakim åitaåem. Dru-gim reåima, åitaå ne mora da razume PHP.

Prethodni primer ukratko prikazuje naåin rada serverskih skriptova. PHP je preve-den i izvrãen na Web serveru, za razliku od JavaScripta i drugih klijentskih jezika koji se prevode i izvrãavaju unutar åitaåa Weba na raåunaru korisnika.

Kôd koji se sada nalazi u PHP datoteci sastoji se od:

n

HTML oznaka

n

PHP oznaka

n

PHP iskaza

n

praznog prostora

Moæemo da dodamo i

n

komentare

Veñinu redova u primeru åini obiåan HTML.

Upotreba PHP oznaka

PHP kôd iz prethodnog primera poåeo je s

<?php

i zavrãio se s

?>

. To je sliåno svim HTML oznakama zato ãto one sve poåiçu znakom “maçe od” (<) i zavrãavaju se znakom “veñe od” (>). Ti znakovi se nazivaju PHP oznakama, koje Web serveru govore gde PHP kôd poåiçe i gde se zavrãava. Tekst izmeœu ta dva znaka prevodi se kao PHP kôd. Tekst izvan tih znakova prosleœuje se åitaåu poãto predstavàa obiåan HTML. PHP oznake omoguñavaju da izaœemo iz bloka HTML-a.

Postoje razliåiti tipovi PHP oznaka koje ñemo u nastavku detaànije objasniti.

Slika 1.2 Tekst prosleœen naredbi echo poslat je åitaåu Weba.

Page 8: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B

, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a

16

Stilovi PHP oznaka

Postoje åetiri stila PHP oznaka. Svaki od delova koda koji slede pisan je odgovaraju-ñim stilom.

n

XML stil

<?php echo '<p>Order processed.</p>'; ?>

Ovaj stil oznaka koriãñen je u kçizi. XML stil se najåeãñe koristi u verzijama PHP-a 3 i 4. Administrator servera ne moæe da ga iskàuåi, tako da ñe on sigurno biti dostupan na svim serverima. Moæe se koristiti s XML dokumentima. Ako na Web lokaciji koristite XML dokumente, koristite taj stil oznaka.

n Kratki stil<? echo '<p>Order processed.</p>'; ?>

Ovaj stil je jednostavniji i oznake liåe na instrukcije za obradu u SGML-u. Za upotrebu ovog stila potrebno je da u konfiguracijskoj datoteci PHP okruæeça aktivirate opciju short_tags ili da prevedete PHP sa ukàuåenim kratkim ozna-kama. Viãe informacija o instaliraçu tog stila oznaka nañi ñete u dodatku A.

n stil SCRIPT <script language='php'> echo '<p>Order processed.</p>'; </script>

Ovaj stil oznaka je najduæi i biñe vam poznat ako ste koristili JavaScript ili VBSrcipt. Moæete ga upotrebiti ako vam program za Web dizajn pravi probleme s drugim stilovima oznaka.

n ASP stil<% echo '<p>Order processed.</p>'; %>

Ovaj stil oznaka koristi se u jeziku ASP. Da biste ga koristili, aktivirajte konfigu-racijski parametar asp_tags. Ovaj stil oznaka dobro ñe vam doñi ako koristite pro-gram za pisaçe ASP stranica ili veñ programirate na ASP-u.

PHP iskaziPHP iskazi se nalaze izmeœu poåetnih i zavrãnih oznaka i odreœuju ãta prevodilac treba da radi. U ovom primeru koristili smo samo jedan tip iskaza:

echo '<p>Order processed.</p>';

Kao ãto ste verovatno pretpostavili, rezultat naredbe echo je veoma jednostavan: ona ãtampa (ili ispisuje) tekst koji joj je prosleœen. Na slici 1.2 vidite da je rezultat to da se tekst “Order processed” pojavàuje u prozoru åitaåa.

Primetiñete da se na kraju iskaza echo nalazi znak taåka i zarez. On se koristi za razdvajaçe izraza u PHP-u, kao ãto se u srpskom jeziku za razdvajaçe reåenica koristi taåka. Ako ste programirali na C-u ili na Javi, takva upotreba taåke i zareza biñe vam poznata.

Izostavàaçe taåke i zareza je tipiåna sintaksna greãka koja se lako pravi. Sreñom, takva greãka se isto tako lako pronalazi i ispravàa.

Page 9: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Ugradça PHP-a u HTML 17

PraznineZnakovi za razdvajaçe, poput novih redova (znak za povratak na poåetak reda), raz-maka i tabulatora, nazivaju se prazninama. Åitaåi zanemaruju praznine u HTML-u. Isto tako postupa i izvrãno okruæeçe za PHP. Pogledajte ova dva odlomka:

<h1>Welcome to Bob's Auto Parts!</h1><p>What would you like to order today?</p>

i

<h1>Welcome to Bob'sAuto Parts!</h1><p>What would you like to order today?</p>

Ta dva odlomka daju identiåan rezultat zato ãto åitaåu izgledaju isto. U HTML kodu moæete da koristite praznine kao pomoñno sredstvo kojim ñete stranice uåiniti åitàivijim i treba to da åinite. Isto se odnosi i na PHP. Nema potrebe da izmeœu PHP iskaza stoje praznine, ali se kôd lakãe åita. Na primer, rezultati iskaza:

echo 'hello ';echo 'world';

i

echo 'hello ';echo 'world';

identiåni su, ali se prvi lakãe åita.

KomentariKomentari su upravo to ãto im samo ime kaæe i sluæe kao obaveãteça àudima koji åitaju kôd. Komentari se mogu upotrebiti da objasne skript, da kaæu ko ga je pisao, zaãto je baã tako napisan, kada je posledçi put skript izmeçen itd. Komentare ñete obiåno nalaziti u svim PHP skriptovima, osim u onim najjednostavnijim.

PHP prevodilac ñe u suãtini ignorisati tekst u komentaru, s obzirom na to da sin-taksni analizator preskaåe komentare, pa su oni ekvivalentni prazninama.

PHP podræava komentare u stilu C, C++ i skriptova komandnog okruæeça.Sledi viãeredni komentar u stilu jezika C, koji bi mogao da se pojavi na poåetku

PHP skripta:

/* Pera Petroviñ Izmeçen: 10. aprila Skript obraœuje narudæbine.*/

Viãeredni komentari treba da poåiçu sa /* i zavrãavaju se sa */. Kao ni u C-u, viãeredni komentari ne mogu biti ugneæœeni jedni u druge.

Za komentare u jednom redu moæete koristiti stil jezika C++:

echo '<p>Order processed.</p>'; // Ãtampaj narudæbenicu

ili skriptova komandnog okruæeça:

echo '<p>Order processed.</p>'; # Ãtampaj narudæbenicu

Page 10: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 18

U oba stila, sve iza simbola jednorednog komentara (# ili //) zanemaruje se dok se ne doœe ili do kraja reda ili do zavrãne PHP oznake.

Dodavaçe dinamiåkog sadræajaSve ãto smo do sada uradili u PHP-u mogli smo da uradimo i sa obiånim HTML-om.

Glavni razlog upotrebe serverskog skript jezika jeste dinamiåki sadræaj. To je vrlo vaæno, zato ãto ñe sadræaj koji se meça periodiåno ili prema potrebama korisnika, nagnati posetioce da se vrañaju na Web lokaciju. PHP omoguñava laku izradu dina-miåkog sadræaja.

Poånimo jednostavnim primerom. Zamenimo PHP u datoteci processorder.php sledeñim kodom:

<?php echo '<p>Order processed at '; echo date('H:i, jS F'); echo '</p>';?>

U ovom kodu koristimo ugraœenu funkciju PHP-a date, kojom muãteriji saopãta-vamo datum i vreme kada je porudæbina obraœena. Pri svakom izvrãavaçu skripta biñe ispisane razliåite vrednosti. Ishod posle jednog izvrãeça skripta prikazan je na slici 1.3.

Pozivaçe funkcijaPogledajmo poziv funkcije date. Ovo je opãti oblik poziva funkcija. PHP sadræi bogatu biblioteku funkcija, koje moæete da koristite u Web aplikacijama. Veñini tih funkcija ili treba proslediti neke podatke, ili one vrañaju neke podatke.

Pogledajmo poziv funkciji:

date('H:i, jS F')

Slika 1.3 PHP funkcija date vraña formatiran datum.

Page 11: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Pristup promenàivama obrasca 19

Obratite paæçu na to da je tekstualni format datuma koji prosleœujemo funkciji u zagradama. To se zove argument ili parametar funkcije. Argumenti su ulazni podaci na osnovu kojih funkcija daje konkretne izlazne rezultate.

Funkcija dateArgument funkcije date je znakovni niz koji predstavàa format rezultata. Svako slovo u znakovnom nizu predstavàa jedan deo datuma i vremena. H je sat u 24-åasovnom formatu, i je minut, s vodeñom nulom ako treba, j je dan u mesecu bez vodeñe nule, S predstavàa redni sufiks na engleskom jeziku (u ovom sluåaju “th”) a F je puno ime meseca.

(Kompletan spisak formata koje podræava funkcija date, potraæite u poglavàu 18.)

Pristup promenàivama obrascaObrasci omoguñavaju prikupàaçe porudæbina muãterija. U PHP-u se lako pristupa unetim podacima, ali konkretan metod zavisi od toga koju verziju PHP-a koristite, kao i od parametara u datoteci php.ini.

Promenàive obrascaSvakom poàu u obrascu moæete pristupiti preko istoimene PHP promenàive. Imena promenàivih u PHP-u moæete da prepoznate, s obzirom na to da sva poåiçu znakom za dolar ($) (izostavàaçe ovog znaka je uobiåajena programerska greãka).

U zavisnosti od toga koju verziju PHP-a koristite i kako je ona instalirana, postoje tri naåina pristupaça podacima u obrascu preko promenàivih. Te metode nemaju zvaniåna imena, pa smo im dali sledeñe nadimke: kratki, sredçi i dugi stil. U svakom sluåaju, dostupno je svako poàe obrasca poslatog PHP skriptu.

Sadræaju poàa tireqty moæete pristupiti na tri naåina:

$tireqty // kratki stil$_POST['tireqty'] // sredçi stil$HTTP_POST_VARS['tireqty'] // dugi stil

U ovom primeru, a i kasnije u kçizi, koristili smo dugi stil za promenàive koje predstavàaju poàa obrasca, ali smo radi lakãe upotrebe praviili kratke verzije pro-menàivih. To je praktiåan i bezbedan naåin rukovaça podacima, koji funkcioniãe na svim sistemima, bez obzira na verziju jezika i parametre okruæeça.

Vi ñete se moæda odluåiti za drugaåiji pristup ali, u svakom sluåaju, dobro je znati ãto viãe pre nego ãto napravite izbor, pa ñemo zbog toga sada reñi neãto o svakoj od te tri metode.

Ukratko:

n Kratki stil je praktiåan, ali zahteva da konfiguracijski parametar register_globals bude ukàuåen (to da li je on standardno ukàuåen ili nije, zavisi od verzije PHP-a). Ovaj stil dozvoàava da pravite greãke zbog kojih kôd neñe biti bezbedan.

Page 12: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 20

n Sredçi stil je priliåno praktiåan, ali postoji tek od verzije PHP-a 4.1.0, tako da na starijim instalacijama neñe raditi.

n Dugi stil je najopãirniji, ali je za sada jedini koji ñe sigurno raditi na svakom ser-veru, bez obzira na konfiguraciju. Imajte u vidu da je zastareo i da ñe zbog toga, dugoroåno gledano, verovatno biti ukinut.

Æelimo da probni kôd u kçizi radi bez ikakvih izmena na ãto veñem broju sistema, pa smo zbog toga odabrali dugi stil, a vaãa odluka moæe biti drugaåija.

Kada koristite kratki stil, imena promenàivih u skriptu ista su kao imena poàa u HTML obrascu. Nije potrebno deklarisati promenàive, odnosno preduzimati bilo ãta da biste napravili promenàive u skriptu. One se skriptu prosleœuju kao ãto se argu-menti prosleœuju funkciji. Ako upotrebite kratki stil, koristiñete promenàivu kao ãto je $tireqty. Poàe tireqty u obrascu pravi promenàivu $tireqty u skriptu.

Upotreba kratkog stila zahteva da parametar register_global u konfiguracijskoj datoteci php.ini bude ukàuåen. Od verzije 4.2.0 naviãe, taj parametar je standardno iskàuåen, dok je u starijim verzijama standardno ukàuåen.

Ovakav pristup promenàivama je privlaåan, ali pre nego ãto ukàuåite parametar register_global, trebalo bi razmisliti zaãto ga je razvojni tim PHP-a iskàuåio.

Direktan pristup promenàivama poput navedene vrlo je praktiåan, ali omoguñava da napravite programerske greãke koje bi mogle da ugroze bezbednost skriptova. Ne postoji oåigledno razdvajaçe izmeœu promenàivih koje ste vi napravili i nepouzdanih promenàivih koje stiæu direktno od korisnika.

Ako ne budete obazrivi, pa promenàivama ne dodelite poåetne vrednosti, korisnici skriptova moñi ñe da izmene poåetne vrednosti promenàivih u skriptu tako ãto ñe ih proslediti kroz obrazac. Ako se odluåite za praktiåni, kratki tip pristupa promenài-vama, zapamtite da obavezno zadate poåetne vrednosti svim lokalnim promenàivama.

Sredçi stil je åitaçe promenàivih obrasca iz jednog od nizova $_POST, $_GET i $_REQUEST. Jedan od nizova $_POST ili $_GET åuvañe podatke iz svih poàa obrasca. Koji niz ñe biti upotrebàen zavisiñe od metode koja se koristi za slaçe obrasca, POST ili GET. Osim toga, svi podaci poslati preko metode POST ili GET biñe dostupni preko niza $_REQUEST.

Ako je obrazac poslat metodom POST, podaci iz poàa tireqty biñe saåuvani u ele-mentu $_POST ['tireqty']. Ako je obrazac poslat metodom GET, podaci ñe biti saåuvani u elementu $_GET ['tireqty']. U bilo kom od ta dva sluåaja, podaci ñe biti dostupni u elementu $_REQUEST ['tireqty'].

Ovi nizovi su neki od novih opãtih promenàivih, takozvanih superglobalnih vred-nosti. Vratiñemo im se kada budemo govorili o oblasti vaæeça promenàivih.

Ako koristite stariju verziju PHP-a, moæda neñete moñi da pristupite nizovima $_POST ili $_GET. Pre verzije 4.1.0, koriãñeni su nizovi $HTTP_POST_VARS i $HTTP_GET_VARS. To nazivamo dugim stilom, koji se moæe koristiti s novim i starim verzijama PHP-a. Zbog toga ãto nije omiàen, moæda neñe raditi na buduñim verzi-jama. U ovom stilu ne postoji ekvivalent nizu $_REQUEST.

Page 13: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Pristup promenàivama obrasca 21

Ako koristite dugi stil, podacima koje su uneli korisnici moñi ñete da pristupate preko elemenata $HTTP_POST_VARS['tireqty'] ili $HTTP_GET_VARS['tireqty'].

Trudili smo se da pomenemo situacije u kojima primeri moæda neñe raditi na sta-rijim verzijama. Primeri u kçizi su testirani na verziji PHP-a 4.3 i ponekad neñe biti kompatibilni s verzijama pre 4.1.0. Preporuåujemo da, gde god je moguñe, koristite sadaãçu verziju.

Moæda ste uoåili da ne proveravamo sadræaj promenàive da bismo bili sigurni da su ispravni podaci uneti u svako poàe obrasca. Pokuãajte namerno da unesete pogreãne podatke i gledajte ãta ñe se desiti. Kada budete proåitali ostatak ovog poglavàa, moæda ñete hteti da napravite mehanizme za proveru ispravnosti podataka.

Prikazañemo to na primeru.Zbog toga ãto su imena promenàivih dugog stila glomazna, i oslaçaju se na nizove,

o kojima ñemo detaàno govoriti u poglavàu 3, praviñemo kopije koje se jednostavnije upotrebàavaju.

Da biste vrednost jedne promenàive kopirali u drugu, upotrebàavajte operator za dodelu, a to je u PHP-u znak jednakosti (=). Sledeñi red napraviñe novu promenàivu po imenu $tireqty i kopirati sadræaj elementa $HTTP_POST_VARS['tireqty'] u novu promenàivu:

$tireqty = $HTTP_POST_VARS['tireqty'];

Umetnite sledeñi odlomak na poåetak skripta. Na poåetku svih ostalih skriptova u ovoj kçizi, koji obraœuju podatke iz obrasca, biñe sliåan deo koda. Kako ovaj kôd ne ispisuje niãta, svejedno je da li ñete ga staviti iznad ili ispod oznake <html> i drugih poåetnih HTML oznaka. Obiåno ovaj deo stavàamo na poåetak skripta da bismo lakãe mogli da ga pronaœemo.

<?php //napravi promenàive kratkih imena $tireqty = $HTTP_POST_VARS['tireqty']; $oilqty = $HTTP_POST_VARS['oilqty']; $sparkqty = $HTTP_POST_VARS['sparkqty'];?>

Navedeni kôd pravi tri nove promenàive, $tireqty, $oilqty, i $sparkqty, koje sadræe podatke poslate iz obrasca metodom POST. Da bi rezultat ovog skripta bio vidàiv, dodajte na dnu sledeñe redove:

echo '<p>Your order is as follows: </p>';echo $tireqty.' tires<br />';echo $oilqty.' bottles of oil<br />';echo $sparkqty.' spark plugs<br />';

Ako pogledate tu datoteku u åitaåu, skript bi trebalo da ispiãe neãto sliåno stranici na slici 1.4. Stvarne prikazane vrednosti ñe, naravno, zavisiti od onoga ãto ste uneli u obrazac.

U naredna tri odeàka govoriñemo o nekoliko zanimàivosti na koje treba obratiti paæçu u ovom primeru.

Page 14: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 22

Nadovezivaçe znakovnih nizovaU skriptu smo komandom echo ãtampali vrednosti koje je korisnik uneo u poàe obra-sca i tekst objaãçeça. Ako paæàivije pogledate iskaze echo, videñete da se izmeœu imena promenàive i prateñeg teksta nalazi taåka (.), kao u sledeñem iskazu:

echo $tireqty.' tires<br />';

To je operator nadovezivaça znakovnih nizova (komada teksta). Åesto ñete ga koristiti kada komandom echo ãaàete izlaz åitaåu i zbog çega ne morate da piãete po nekoliko komandi echo za jednostavan rezultat.

Ukoliko upiãete ime promenàive (koja nije niz) u tekst pod navodnicima, PHP ñe zameniti ime odgovarajuñom vrednoãñu (nizovi su neãto sloæeniji, pa ñemo kombi-novaçe nizova i znakovnih nizova objasniti u poglavàu 4).

Na primer:

echo "$tireqty tires<br />";

Navedeni iskaz je ekvivalentan prvom iskazu. Oba formata su ispravna i od vas zavisi koji ñete koristiti. Imajte u vidu to da su koriãñeni navodnici. Imena promenài-vih ne moæete na taj naåin stavàati u tekst pod polunavodnicima. Sledeñi iskaz:

echo '$tireqty tires<br />';

prikazuje tekst "$tireqty tires<br />" . Ime promenàive ñe unutar navodnika biti zameçeno çenom vrednoãñu. U polunavodnicima, ime promenàive ili bilo koji drugi tekst ostaju neizmeçeni.

Promenàive i literaliPromenàiva i tekst koji spajate u svakom iskazu echo jesu vrednosti razliåitih tipova. Promenàive su simboli za podatke, a tekst direktno predstavàa vrednost podataka. Sirovi podaci se nazivaju literali da bi se razlikovali od promenàivih. Ime $tireqty je

Slika 1.4 Sadræaju poàa obrasca koje je uneo korisnik lako se pristupa.

Page 15: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Davaçe vrednosti promenàivama 23

promenàiva – simbol za podatke koje je uneo korisnik. S druge strane, ' tires<br />' je literal åija vrednost se tumaåi doslovno. U stvari, ne sasvim doslovno. Señate li se drugog primera? PHP je zamenio ime promenàive $tireqty vrednoãñu smeãtenom u promenàivoj.

Ne zaboravite da postoje dve vrste znakovnih nizova u PHP-u: pod navodnicima i pod polunavodnicima. PHP ñe pokuãati da izraåuna vrednost znakovnih nizova pod navodnicima, ãto ste veñ videli. Znakovni nizovi pod polunavodnicima obraœuju se kao pravi literali.

IdentifikatoriIdentifikatori su imena promenàivih (imena funkcija i klasa takoœe su identifikatori – o funkcijama i klasama govorimo u petom i ãestom poglavàu. Osnovna pravila za koriãñeçe identifikatora su:

n identifikatori mogu biti bilo koje duæine i mogu da se sastoje od slova, brojeva, podvlaka i simbola za dolar. U identifikatorima paæàivo koristite simbol za dolar (pogledajte odeàak “Promenàive promenàive”).

n Identifikatori ne mogu da poåiçu cifrom.n u PHP-u se razlikuju mala i velika slova u imenima identifikatora. $tireqty nije

isto ãto i $TireQty, i pokuãaj naizmeniåne upotrebe jednih i drugih tipiåna je programerska greãka. Imena funkcija su izuzetak od ovog pravila – çihova imena se mogu pisati i malim i velikim slovima.

n Promenàiva moæe da ima isto ime kao i funkcija. Ta tehnika zbuçuje i trebalo bi je izbegavati. Ne moæete napraviti funkciju koja ñe imati isto ime kao i neka druga funkcija.

Promenàive koje deklariãe korisnikOsim promenàivih koje su prosleœene iz HTML obrasca, moæete da deklariãete i koristite i sopstvene promenàive.

Jedna od karakteristika PHP-a jeste to ãto ne treba da deklariãete promenàive pre nego ãto ih koristite. Promenàiva ñe biti napravàena kada joj prvi put dodelite vred-nost – za dodatne informacije proåitajte sledeñi odeàak.

Davaçe vrednosti promenàivamaPromenàivama dajete vrednost upotrebom operatora za dodelu vrednosti, =, kao ãto ste to uradili kada ste kopirali vrednost jedne promenàive u drugu. Hoñete da izraåu-nate ukupan broj naruåenih artikala i ukupnu cenu. Za åuvaçe tih brojeva moæete da napravite dve promenàive. Za poåetak ñete svakoj dati vrednost nula.

Dodajte sledeñe redove na kraj PHP skripta:

$totalqty = 0;$totalamount = 0.00;

Page 16: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 24

Svaki od dva navedena reda pravi promenàivu i daje joj vrednost literala. Promen-àivama moæete da dodelite vrednosti drugih promenàivih, na primer:

$totalqty = 0;$totalamount = $totalqty;

Tipovi promenàivihTip promenàive se odnosi na vrstu podatka koji se u çoj nalazi.

Tipovi podataka u PHP-uPHP podræava sledeñe tipove podataka:

n integer – celobrojni, koristi se za cele brojeven double – pokretni zarez dvostruke preciznosti, koristi se za realne brojeven string – znakovni niz, koristi se za nizove znakova n bool – logiåki, koristi se za vrednosti taåno i netaåno n array – niz, koristi se za åuvaçe viãe celina podataka istog tipa (poglavàe 3)n object – objekat, koristi se za åuvaçe primeraka klasa (pogledajte poglavàe 6).

PHP 4 je dodao tri tipa – logiåki, NULL i resurs. Promenàive kojima nije data vrednost, koje nisu definisane ili koje su dobile konkretnu vrednost NULL tipa su NULL. Izvesne ugraœene funkcije za rad s bazama podataka vrañaju resurse. Skoro je izvesno da s tim tipom neñete direktno raditi.

PHP takoœe podræava tipove pdfdoc i pdfinfo ako izvrãno okruæeçe podræava rad s dokumentima u formatu PDF (Portable Document Format). O upotrebi PDF-a u PHP-u govorimo u poglavàu 30.

Provera tipovaPHP je jezik s veoma slabom proverom tipova. U veñini programskih jezika, promen-àive mogu da sadræe samo jedan tip podataka i one se pre upotrebe promenàive mora deklarisati, kao ãto je to sluåaj u C-u. U PHP-u se tip promenàive odreœuje na osnovu vrednosti koja joj je dodeàena.

Na primer, kada smo napravili $totalqty i $totalamount, çihovi poåetni tipovi su bili odreœeni ovako:

$totalqty = 0;$totalamount = 0.00;

S obzirom na to da smo promenàivoj $totalqty dodelili vrednost 0, ãto je ceo broj, to je sada promenàiva celobrojnog tipa. Na isti naåin, promenàiva $totalamount sada je u formatu pokretnog zareza dvostruke preciznosti.

Skriptu bismo sada mogli da dodamo sledeñi red:

$totalamount = 'Hello';

Promenàiva $totalamount bi u tom sluåaju bila znakovni niz. PHP meça tip pro-menàive prema onome ãto se u çoj nalazi.

Page 17: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Konstante 25

Moguñnost promene tipova u hodu moæe biti veoma korisna. Ne zaboravite da PHP zna koji ste tip podataka stavili u promenàive. PHP ñe vratiti podatke upisanog tipa prilikom åitaça promenàive.

Konverzija tipovaOperator za konverziju omoguñava promenu tipa promenàive ili vrednosti. Taj proces se odvija identiåno kao u C-u. Privremeni tip stavite u zagradu ispred promenàive koju æelite da konvertujete.

Na primer:

$totalqty = 0;$totalamount = (double)$totalqty;

Drugi red znaåi “proåitaj vrednost promenàive $totalqty, tumaåi je kao vrednost tipa double i smesti je u $totalamount”. Tip promenàive $totalamount biñe double. Tip konvertovane promenàive se ne meça, tako da $totalqty ostaje celobrojnog tipa.

Promenàive promenàivePHP podræava joã jedan tip promenàive – promenàivu promenàivu (engl. variable variable). Takve promenàive omoguñavaju da ime promenàive meçate dinamiåki.

(Kao ãto vidite, PHP u ovoj oblasti daje dosta slobode – svi jezici ñe dozvoliti da meçate vrednost promenàive, ali nema mnogo jezika koji ñe dozvoliti da meçate tip promenàive. Joã je maçe jezika koji ñe dozvoliti da meçate ime promenàive.)

Promenàive promenàive se dobijaju kada se vrednost jedne promenàive koristi kao ime druge. Na primer:

$varname = 'tireqty';

Umesto $tireqty moæete da koristite $$varname. Na primer, promenàivoj $tireqty moæete da dodelite vrednost sledeñim iskazom:

$$varname = 5;

ãto je ekvivalentno izrazu:

$tireqty = 5;

Promenàive promenàive mogu izgledati pomalo neobiåno, ali ñemo ih objasniti neãto kasnije. Umesto da svaku promenàivu obrasca navodite i koristite zasebno, moæete da upotrebite petàu i promenàivu i da ih sve obradite automatski. U odeàku o petàama for postoji primer koji prikazuje tu tehniku.

KonstanteKao ãto ste videli ranije, vrednost koja se åuva u promenàivoj moæete da meçate. Takoœe moæete i da deklariãete konstante. Konstanta predstavàa vrednost isto kao i promenàiva, ali se odreœuje jednom i viãe se ne moæe meçati.

Page 18: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 26

Cene artikala moæete åuvati kao konstante. Te konstante moæete da definiãete upo-trebom funkcije define.

define('TIREPRICE', 100);define('OILPRICE', 10);define('SPARKPRICE', 4);

Dodajte navedene redove u skript.Primetiñete da su sva imena konstanti ispisana velikim slovima. Ta konvencija,

pozajmàena iz C-a, olakãava razlikovaçe promenàivih i konstanti. Ona nije obavezna, ali ñe olakãati åitaçe i odræavaçe koda.

Sada imate tri konstante koje se mogu upotrebiti za izraåunavaçe vrednosti porudæbine.

Vaæna razlika izmeœu konstanti i promenàivih jeste ta da se ispred konstante ne piãe simbol za dolar. Ako æelite da koristite vrednost konstante, upiãite samo çeno ime. Na primer, da biste upotrebili konstantu koju ste upravo napravili, napisañete:

echo TIREPRICE;

Izvrãno okruæeçe za PHP definiãe velik broj konstanti. Moæete ih pregledati upo-trebom komande phpinfo:

phpinfo();

koja ñe prikazati spisak unapred definisanih konstanti i promenàivih, kao i neke druge korisne informacije. O nekima od çih biñe reåi kasnije.

Oblast vaæeça promenàiveIzraz oblast vaæeça (engl. scope) odnosi se na mesta u skriptu na kojima je konkretna promenàiva vidàiva. U PHP-u postoje åetiri tipa oblasti vaæeça:

n Ugraœene superglobalne promenàive, vidàive su svuda u skriptu.n Globalne promenàive, deklarisane su u skriptu i vidàive su svuda u skriptu, ali ne

i unutar funkcija.n Promenàive upotrebàene unutar funkcija lokalne su za te funkcije.n Promenàive upotrebàene unutar funkcija koje su deklarisane kao globalne, uka-

zuju na globalnu promenàivu istog imena.

Od PHP-a 4.2 nadaàe, nizovi $_GET i $_POST, kao i neke druge posebne promen-àive imaju posebnu oblast vaæeça. To su superglobalne promenàive koje su vidàive svuda, kako unutar tako i izvan funkcija.

Kompletan spisak superglobalnih promenàivih je:

n $GLOBALS – niz svih globalnih promenàivihn $_SERVER – niz promenàivih iz serverskog okruæeçan $_GET – niz promenàivih koje se prosleœuju skriptu metodom GETn $_POST – niz promenàivih koje se prosleœuju skriptu metodom POST

Page 19: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Operatori 27

n $_COOKIE – niz kolaåiña n $_FILES – niz promenàivih koje se odnose na datoteke poslate drugom raåunarun $_ENV – niz promenàivih okruæeçan $_REQUEST – niz svih promenàivih koje unosi korisnikn $_SESSION – niz promenàivih sesije

Sve ove promenàive opisañemo kasnije, kako se budu pojavàivale u kçizi. Oblast vaæeça ñemo detaànije objasniti kada budemo govorili o funkcijama. Za sada ñemo koristiti globalne promenàive, osim ako je drugaåije naglaãeno.

OperatoriOperatori su simboli koji omoguñavaju izvrãavaçe operacija nad vrednostima i pro-menàivama. Neki operatori ñe vam trebati da biste na porudæbini izraåunali ukupnu cenu i porez.

Veñ smo spomenuli dva operatora, operator dodele i operator nadovezivaça zna-kovnih nizova. Pogledajmo sada kompletan spisak.

Operatori mogu da imaju jedan, dva ili tri argumenta, s tim ãto veñina ima dva. Na primer, operator dodele ima dva argumenta – memorijsku lokaciju na levoj strani sim-bola = i izraz na desnoj strani. Ti argumenti se nazivaju operandi – vrednosti kojima se operiãe.

Aritmetiåki operatoriAritmetiåki operatori su priliåno jednostavni – to su obiåni znakovi za raåunske ope-racije, kao u tabeli 1.1.

Rezultat operacije svakog operatora moæe se saåuvati. Na primer,

$result = $a + $b;

Sabira se i oduzima kao u matematici. Rezultat tih operacija je sabiraçe, odnosno oduzimaçe vrednosti koje se nalaze u promenàivama $a i $b.

Znak za oduzimaçe (-) moæete da koristite kao unarni operator (operator sa jed-nim argumentom, odnosno operandom) za negativne brojeve, na primer,

$a = -1;

Tabela 1.1 Aritmetiåki operatori jezika PHP

Operator Ime Primer

+ sabiraçe $a + $b

- oduzimaçe $a - $b

* mnoæeçe $a * $b

/ deàeçe $a / $b

% modulo $a % $b

Page 20: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 28

Mnoæeçe i deàeçe takoœe se rade kao i matematiåke operacije istog imena. Obra-tite paæçu na to da se kao znak za mnoæeçe koristi zvezdica, a kao znak za deàeçe kosa crta. Operator modulo vraña ostatak celobrojnog deàeça promenàive $a pro-menàivom $b. Pogledajte sledeñi odlomak:

$a = 27;$b = 10;$result = $a%$b;

Vrednost promenàive $result biñe ostatak celobrojnog deàeça 27 sa 10, dakle 7.Trebalo bi da imate u vidu da se aritmetiåki operatori obiåno primeçuju na bro-

jeve. Ako ih primenite na znakovne nizove, PHP ñe pokuãati da konvertuje znakovni niz u broj. Ukoliko znakovni niz sadræi “e” ili “E”, biñe konvertovan u tip double, dok ñe u protivnom biti konvertovan u celobrojni tip. PHP ñe upotrebiti cifre na poåetku znakovnog niza kao vrednost – ako ih nema, vrednost znakovnog niza biñe nula.

Operator nad znakovnim nizovimaVeñ ste videli i upotrebili jedini operator nad znakovnim nizovima (engl. string ope-

rator). Operator nadovezivaça znakovnih nizova moæete upotrebiti za spajaçe dva niza, otprilike isto kao ãto biste upotrebili operator sabiraça za sabiraçe dva broja.

$a = "Bob's ";$b = 'Auto Parts';$result = $a.$b;

Promenàiva $result ñe u tom sluåaju sadræati znakovni niz “Bob’s Auto Parts”.

Operatori dodeleVeñ ste videli da je = osnovni operator dodele. O tom znaku uvek govorite kao o ope-ratoru dodele i åitajte ga kao “dobija vrednost”. Na primer:

$totalqty = 0;

Navedeno bi trebalo åitati kao “$totalqty dobija vrednost nula”. Zaãto je tako reñi ñemo kada budemo govorili o operatorima poreœeça kasnije u ovom poglavàu.

Vrednost operacije dodeleOperator dodele vraña zadatu vrednost izraza, sliåno drugim operatorima.

$a + $b

je rezultat sabiraça promenàivih $a i $b. Sliåno tome, vrednost izraza

$a = 0;

je nula.To omoguñava da napiãete izraze poput:

$b = 6 + ($a = 5);

Promenàiva $b dobija vrednost 11, a za sve operatore dodele vaæi: vrednost åitavog iskaza dodele je vrednost koja je dodeàena operandu na levoj strani.

Zagrade moæete upotrebiti da bi se poveñao prioritet izraåunavaça podizraza, kao ãto smo ovde uradili i kao ãto se radi u matematici.

Page 21: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Operatori 29

Kombinovani operatori dodeleOsim jednostavnog operatora dodele postoji i skup kombinovanih operatora dodela. Svaki od çih je skrañeni zapis operacije nad promenàivom i upisivaça rezultata u tu promenàivu. Na primer:

$a += 5;

isto je kao da ste napisali:

$a = $a + 5;

Kombinovani operatori dodele postoje za svaki aritmetiåki operator i za operator nadovezivaça znakovnih nizova.

Kombinovani operatori dodele i çihovi rezultati prikazani su u tabeli 1.2.

Prefiksno i sufiksno uveñaçe i umaçeçePrefiksni i sufiksni operatori uveñaça ++ i umaçeça -- sliåni su operatorima += i -=, uz neke specifiånosti.

Operatori uveñaça imaju dva efekta – oni poveñavaju vrednost i dodeàuju je. Pogledajte ovo:

$a=4;echo ++$a;

U drugom redu koristi se prefiksni operator uveñaça, koji se tako zove zato ãto se ++ pojavàuje ispred $a. Prvo se poveñava vrednost $a za 1 i, drugo, vraña se uveñana vrednost. U ovom sluåaju promenàiva $a je poveñana na 5 i zatim je vrednost 5 vra-ñena i ispisana. Vrednost åitavog izraza je 5 (imajte u vidu da je prava vrednost $a izmeçena: ne vrañamo samo $a + 1).

Meœutim, ako je ++ posle $a, to je sufiksni operator uveñaça i ima drugaåiji efekat. Pogledajte ovo:

$a=4;echo $a++;

Vrednost je prvo vrañena i ispisana, a zatim poveñana. Vrednost åitavog izraza je 4 i to je vrednost koja ñe biti ispisana. Vrednost $a posle ovog iskaza je 5.

Kao ãto verovatno pretpostavàate, sliåno se ponaãa i operator --, s tim ãto se vred-nost $a smaçuje, a ne poveñava.

Tabela 1.2 Kombinovani operatori dodele

Operator Upotreba Ekivalentan izrazu

+= $a += $b $a = $a + $b

-= $a -= $b $a = $a - $b

*= $a *= $b $a = $a * $b

/= $a /= $b $a = $a / $b

%= $a %= $b $a = $a % $b

.= $a .= $b $a = $a . $b

Page 22: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 30

ReferenceNovost u PHP-u 4 je operator referenci (&), koji se moæe koristiti zajedno s dodelom. Kada se jedna promenàiva dodeàuje drugoj, obiåno se pravi kopija prve promenàive i ta se kopija åuva negde drugde u memoriji. Na primer:

$a = 5;$b = $a;

Navedeni redovi prave drugu kopiju vrednosti u promenàivoj $a i smeãtaju je u $b. Ako zatim izmenite vrednost promenàive $a, $b se neñe promeniti.

$a = 7; // $b je joã uvek 5

Kopiraçe moæete da izbegnete upotrebom operatora reference &. Na primer:

$a = 5;$b = &$a;$a = 7; // $a i $b sada su 7

Operatori poreœeça Operatori poreœeça se koriste za poreœeçe dve vrednosti. Izrazi koji koriste te ope-ratore vrañaju logiåku vrednost u zavisnosti od rezultata poreœeça.

Operator jednakostiOperator poreœeça == (dva znaka jednakosti) omoguñava da proverite da li su dve vrednosti jednake. Na primer:

$a == $b

proverava da li su vrednosti $a i $b iste. Rezultat koji vraña ovaj izraz biñe true ako su jednaki, a false ako nisu.

Ovaj izraz se lako brka sa operatorom dodele =. Greãka neñe biti prijavàena, ali obiåno neñete dobiti ni æeàeni rezultat. Vrednosti koje nisu nula pretvaraju se u logiåku vrednost true, a nula se pretvara u logiåku vrednost false. Na primer, ako dve promenàive imaju ovakve poåetne vrednosti:

$a = 5;$b = 7;

rezultat izraza $a = $b biñe true. Zaãto? Vrednost izraza $a = $b vrednost je dode-àena levoj strani, ãto je u ovom sluåaju 7. To je vrednost koja nije nula, pa je rezultat izraza true. Ukoliko biste napisali to umesto izraza $a == $b, ãto daje false, uveli biste u kôd logiåku greãku koja se veoma teãko pronalazi. Uvek proverite kako koris-tite ova dva operatora i da li ste upotrebili ispravan operator.

Ova greãka se lako pravi i sigurno ñete je i vi napraviti mnogo puta.

Ostali operatori poreœeçaPHP podræava joã neke operatore poreœeça. Oni su prikazani u tabeli 1.3.

Page 23: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Operatori 31

Obratite paæçu na novi operator identiånosti === koji se prvi put pojavàuje u PHP-u 4. On vraña true samo ako su dva operanda jednaka i istog tipa.

Logiåki operatoriLogiåki operatori se koriste za kombinovaçe rezultata logiåkih uslova. Na primer, treba da utvrdite da li je vrednost promenàive $a izmeœu 0 i 100. Trebalo bi da prove-rite uslove $a >= 0 i $a <= 100, upotrebom operanda koçunkcije:

$a >= 0 && $a <=100

PHP podræava logiåke operacije koçunkcije, disjunkcije, iskàuåive disjunkcije i negacije.

Skup logiåkih operatora i çihova upotreba prikazani su u tabeli 1.4.

Operatori and i or imaju niæi prioritet od operatora && i ||. O prioritetima ñe viãe reåi biti kasnije u ovom poglavàu.

Operatori nad bitovimaOperatori nad bitovima omoguñavaju da ceo broj obraœujete kao niz bitova u memoriji.

Verovatno za çih u PHP-u neñete nañi veliku primenu. Operatori nad bitovima prikazani su u tabeli 1.5.

Tabela 1.3 Operatori poreœeça

Operator Ime Upotreba

== jednako $a == $b

=== identiåno $a === $b

!= razliåito $a != $b

<> razliåito $a <> $b

< maçe od $a < $b

> veñe od $a > $b

<= maçe od ili jednako $a <= $b

>= veñe od ili jednako $a >= $b

Tabela 1.4 Logiåki operatori

Operator Ime Upotreba Rezultat

! negacija !$b Vraña true ako je $b false i obrnuto&& koçunkcija $a && $b Vraña true ako su $a i $b true; u protivnom

false

|| disjunkcija $a || $b Vraña true ako su $a ili $b ili oba true; u protivnom false

and koçunkcija $a and $b Isto kao &&, ali s niæim prioritetomor disjunkcija $a or $b Isto kao ||, ali s niæim prioritetom

Page 24: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 32

Ostali operatoriOsim operatora koje smo do sada predstavili, postoje i drugi.

Zarez se koristi za razdvajaçe argumenata funkcije i stavki u spisku. Dva posebna operatora, new i ->, koriste se za pravàeçe objekta, odnosno pristup

ålanovima objekata. O çima ñe viãe reåi biti u poglavàu 6.Operator elementa niza[]omoguñava pristupaçe elementima niza. Nekada se za to

koristi i operator =>. O çima ñe viãe reåi biti u poglavàu 3.Postoje joã tri operatora koje ñemo ukratko opisati.

Uslovni operatorOperator ?: radi isto kao i u C-u. Ima oblik:

uslov ? vrednost ako je uslov ispuçen : vrednost ako nije ispuçen

Uslovni operator je sliåan verziji izraza iskaza if-else, o kojem govorimo kasnije u ovom poglavàu.

Jednostavan primer je:

($ocena > 50 ? 'Poloæio' : 'Pao');

Ovaj izraz studentskim ocenama dodeàuje 'Poloæio' ili 'Pao'.

Operator potiskivaça greãkeOperator potiskivaça greãke, @, moæe se koristiti ispred mnogih izraza. Na primer,

$a = @(57/0);

Bez operatora @ izvrãno okruæeçe bi ispisalo upozoreçe “deàeçe nulom” (pro-bajte). Sa operatorom, greãka je potisnuta.

Ako na ovaj naåin potisnete upozoreça, trebalo bi da napiãete kôd za obradu gre-ãaka. Ako je ukàuåena konfiguracijska opcija track_errors, poruka o greãci biñe u globalnoj promenàivoj $php_errormsg.

Tabela 1.5 Operatori nad bitovima

Operator Ime Upotreba Rezultat

& koçunkcija $a & $b bitovi koji su aktivni u $a i $b aktivni su u rezultatu

| disjunkcija $a | $b bitovi koji su aktivni u $a ili $b aktivni su u rezultatu

~ negacija ~$a bitovi koji su aktivni u $a nisu aktivni u rezultatu i obrnuto

^ iskàuåiva disjunkcija $a ^ $b bitovi koji su aktivni ili u $a ili u $b ali ne u oba, aktivni su u rezultatu

<< pomeraçe ulevo $a << $b pomera bitove $a ulevo za $b mesta>> pomeraçe udesno $a >> $b pomera bitove $a udesno za $b mesta

Page 25: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Upotreba operatora: izraåunavaçe zbira cena na obrascu 33

Operator izvrãeçaReå je zapravo o paru operatora – paru inverznih polunavodnika (``). Inverzni polu-navodnik se obiåno nalazi na istom tasteru gde i simbol ~.

PHP ñe pokuãati da izvrãi sve ãto se nalazi izmeœu inverznih polunavodnika u koman-dnom okruæeçu na serveru. Izlazni podaci komande predstavàaju vrednost izraza.

Na primer, u operativnim sistemima tipa Unix moæete da upotrebite:

$out = `ls -la`;echo '<pre>'.$out.'</pre>';

Ekvivalent tome na Windows serveru bilo bi:

$out = `dir c:`;echo '<pre>'.$out.'</pre>';

Obe verzije ñe smestiti spisak datoteka iz direktorijuma u promenàivu $out. Postoje i drugi naåini izvrãavaça komandi na serveru. O çima ñemo detaànije

govoriti u poglavàu 16.

Upotreba operatora: izraåunavaçe zbira cena na obrascuSada znate kako da koristite operatore u PHP-u, pa ste spremni da izraåunavate zbir cena i poreza u porudæbini.

Dodajte sledeñi odlomak na kraj PHP skripta:

$totalqty = 0;$totalqty = $tireqty + $oilqty + $sparkqty;echo 'Items ordered: '.$totalqty.'<br />';

$totalamount = 0.00;

define('TIREPRICE', 100);define('OILPRICE', 10);define('SPARKPRICE', 4);

$totalamount = $tireqty * TIREPRICE + $oilqty * OILPRICE + $sparkqty * SPARKPRICE;

echo 'Subtotal: $'.number_format($totalamount,3).'<br />';

$taxrate = 0.10; // porez je 10%$totalamount = $totalamount * (1 + $taxrate);echo 'Total including tax: $'.number_format($totalamount,2).'<br />';

Ako osveæite stranicu u prozoru åitaåa, trebalo bi da vidite neãto kao na slici 1.5. Kao ãto vidite, upotrebili smo nekoliko operatora: operatore sabiraça (+) i mno-

æeça (*) za izraåunavaçe zbira, i operator nadovezivaça (.) za definisaçe rezultata.

Page 26: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 34

Takoœe, upotrebili smo funkciju number_format za formatiraçe zbira. To je funk-cija iz PHP-ove biblioteke Math.

Ako paæàivo pogledate izraze, moæda ñete se zapitati zaãto su raåunati baã tim redosledom. Pogledajte, na primer, sledeñi iskaz:

$totalamount = $tireqty * TIREPRICE + $oilqty * OILPRICE + $sparkqty * SPARKPRICE;

Izgleda da je ukupna suma taåna, ali zaãto su mnoæeça izvrãena pre sabiraça? Odgovor je u prioritetima operatora, dakle u redosledu çihovog izraåunavaça.

Prioriteti i asocijativnost: izraåunavaçe izrazaOperator ima prioritet, ili redosled kojim se izraåunava.

Operatori takoœe imaju asocijativnost – redosled kojim ñe operatori istog prioriteta biti izraåunati. To je obiåno sleva nadesno (skrañeno se naziva levo), zdesna nalevo (skrañeno desno), ili asocijativnost nije bitna (u tabeli n/b).

Tabela 1.6 prikazuje prioritete i asocijativnost operatora.U ovoj tabeli, najmaçi prioritet imaju operatori na vrhu, i on raste ka dnu tabele.

Tabela 1.6 Prioritet operatora

Asocijativnost Operatori

levo ,

levo or

levo xor

Slika 1.5 Zbir cena je izraåunat, formatiran i prikazan.

Page 27: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Funkcije koje upravàaju promenàivama 35

Obratite paæçu na to da najviãi prioritet ima operator o kojem joã nismo govorili: obiåne zagrade. One poveñavaju prioritet svega ãto se nalazi u çima. Pomoñu çih moæete da zaobiœete pravila prioriteta kada je to potrebno.

Pogledajte ovaj deo posledçeg primera:

$totalamount = $totalamount * (1 + $taxrate);

Da ste napisali:

$totalamount = $totalamount * 1 + $taxrate;

operator mnoæeça bi bio prvi izvrãen, s obzirom na to da ima viãi prioritet od opera-tora sabiraça, i tako biste dobili pogreãan rezultat. Zbog zagrada se prvo izraåunava podizraz 1 + $taxrate.

U izrazu moæete upotrebiti neograniåen broj zagrada, a uvek ñe se prvo izraåuna-vati koje su one najdubàe ugneæœene.

Funkcije koje upravàaju promenàivamaPre nego ãto napustimo svet promenàivih i operatora, pogledañemo funkcije koje upravàaju promenàivama. Postoji biblioteka funkcija koja omoguñava da na razne naåine obraœujete promenàive i ispitujete ih.

levo and

desno print

levo = += -= *= /= .= %= &= |= ^= ~= <<= >>=

levo ? :

levo ||

levo &&

levo |

levo ^

levo &

n/b == != ===

n/b < <= > >=

levo << >>

levo + - .

levo * / %

desno ! ~ ++ -- (int) (double) (string) (array) (object) @

desno []

n/b new

n/b ()

Tabela 1.6 Prioritet operatora (nastavak)

Asocijativnost Operatori

Page 28: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 36

Ispitivaçe i meçaçe tipova promenàivihVeñina ovih funkcija se odnosi na proveru tipova.

Dve najopãtije funkcije su gettype i settype. One imaju sledeñe prototipove – prototipi opisuju koje argumente funkcija oåekuje i ãta vraña.

string gettype(promenàiva);bool settype (promenàiva, tip);

Funkcija gettype utvrœuje tip promenàive i vraña znakovni niz s tipom imena ili porukom “tip nepoznat” ako to nije nijedan od poznatih tipova.

Funkcija settype meça tip prosleœene promenàive u tip koji opisuje prosleœeni znakovni niz u drugom argumentu.

Na primer:

$a = 56;echo gettype($a).'<br />';settype($a, 'double');echo gettype($a).'<br />';

Kada se gettype poziva prvi put, $a je celobrojnog tipa. Nakon ãto se pozove settype, tip ñe biti promeçen u double.

Postoje i funkcije za ispitivaçe odreœenih tipova. Sve vrañaju logiåke vrednosti. Te funkcije su:

n is_array

n is_double, is_float, is_real (sve je to ista funkcija)n is_long, is_int, is_integer (sve je to ista funkcija)n is_string

n is_object

Ispitivaçe staça promenàivePostoji nekoliko naåina za ispitivaçe staça promenàive.

Funkcija isset ima sledeñi prototip:

bool isset(promenàiva);

Funkcija isset vraña true ako je promenàiva definisana, a u suprotnom vraña false.Definiciju promenàive moæete da proãirite funkcijom unset koja ima sledeñi

prototip:

void unset(promenàiva);

Funkcija unset briãe promenàivu koja joj je prosleœena.Konaåno, postoji i empty. Ona proverava da li promenàiva postoji i da li ima vred-

nost koja je nula odnosno prazna je, i vraña true ili false. Funkcija empty ima sledeñi prototip:

boolean empty(mixed var);

Pogledajmo primer u kojem se koriste navedene funkcije.

Page 29: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Donoãeçe odluka u uslovnim strukturama 37

Skriptu privremeno dodajte sledeñi kôd:

echo isset($tireqty);echo isset($nothere);echo empty($tireqty);echo empty($nothere);

Osveæite stranicu da biste videli rezultat.Vrednost funkcije isset za promenàivu $tireqty treba da vrati true bez obzira

na vrednost koju ste ili niste uneli u to poàe u obrascu. Vrednost funkcije empty zavisi od toga ãta ste uneli.

Promenàiva $nothere ne postoji, pa ñe isset dati rezultat false, a empty rezultat true.

To moæe biti korisno ako æelite da proverite da li je korisnik popunio odgovarajuña poàa u obrascu.

Promena tipa promenàivihTri funkcije imaju isti efekat kao i konverzija promenàive:

int intval(promenàiva);float doubleval(promenàiva);string strval(promenàiva);

Sve funkcije vrañaju vrednost prosleœene promenàive, konvertovanu u odgovara-juñi tip (redom: u ceo broj, u realan broj i u znakovni niz).

U ovoj kçizi, kao i u dokumentaciji na lokaciji php.net, spomiçe se tip podataka mixed. Takav tip ne postoji, ali kako PHP fleksibilno upravàa tipovima, mnoge funk-cije se mogu primeniti na vrednosti raznih tipova (ili bilo kog tipa). Argumenti u kojima su dozvoàeni razni tipovi, oznaåeni su tipom mixed.

Upravàaåke struktureUpravàaåke strukture omoguñavaju upravàaçe tokom izvrãeça programa ili skripta. Grupisali smo ih u uslovne (strukture granaça) i strukture ponavàaça ili petàe. Sada ñemo prikazati te strukture u PHP-u.

Donoãeçe odluka u uslovnim strukturamaAko æelite razumno da odgovorite na ono ãto korisnik unosi, kôd mora donositi odluke. Konstrukcije koje programu govore da donosi odluke, nazivaju se uslovne strukture.

Iskaz ifIskaz if moæete da upotrebite za donoãeçe odluke prema uslovu. Ako je uslov ispu-çen, sledeñi deo koda ñe biti izvrãen – u suprotnom biñe preskoåen. Uslovi u iskazima if nalaze se u zagradama.

Page 30: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 38

Na primer, ukoliko obrazac nije popuçen ispravno, umesto da kaæe da se porudæ-bina obraœuje, stranica bi mogla da ispiãe neku korisniju poruku.

Kada posetilac ne naruåi niãta, moæete da mu kaæete “Niste niãta naruåili”. To se lako postiæe sledeñim iskazom if:

if( $totalqty == 0 ) echo 'You did not order anything on the previous page!<br />';

Uslov koji koristimo je $totalqty == 0. Ne zaboravite da se operator jednakosti (==) ponaãa drugaåije od operatora dodele =.

Uslov $totalqty == 0 ñe biti ispuçen ako je $totalqty nula. Ako $totalqty nije nula, uslov ñe biti false. Kada uslov ima vrednost true, biñe izvrãen iskaz echo.

Blokovi naredabaÅesto unutar jednog uslovnog iskaza, kao ãto je if, treba obuhvatiti viãe iskaza. Nema potrebe da se ispred svakog stavàa nov iskaz if. Umesto toga, moæete grupisati iskaze u blok. Da biste grupu deklarisali kao blok, stavite je u vitiåaste zagrade:

if( $totalqty == 0 ){ echo '<font color=red>'; echo 'You did not order anything on the previous page!<br />'; echo '</font>';}

Tri reda unutar vitiåaste zagrade sada åine blok. Kada je uslov ispuçen, sva tri reda ñe biti izvrãena. Kada uslov nije ispuçen, sva tri reda ñe biti zanemarena.

Iskazi elseÅesto ñete hteti da odluåite koji skup moguñih radçi æelite da se izvede.

Iskaz else omoguñava da definiãete alternativnu radçu koju treba preduzeti ako uslov iskaza if nije ispuçen. Æelite da ukaæete korisnicima da nisu niãta naruåili. S druge strane, ako naruåe neãto, æelite da im umesto upozoreça prikaæete to ãto su naruåili.

Ako drugaåije rasporedite kôd i dodate jedan iskaz else, moñi ñete da prikaæete upozoreçe ili opis naruåenog.

if( $totalqty == 0 ){ echo 'You did not order anything on the previous page!<br />';}else

NapomenaKao ãto smo veñ rekli, PHP zanemaruje praznine. Radi lakãeg åitaça, trebalo bi da uvlaåite iskaze. Uvlaåeçe se obiåno koristi da biste lako uoåili koji ñe redovi biti izvrãeni ako su ispuçeni uslovi, koji iskazi su grupisani u blokove i koji iskazi su deo petài ili funkcija. U prethodnim primerima moæete da vidite da je uvuåen iskaz koji zavisi od iskaza if, kao i iskazi koji åine blok.

Page 31: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Donoãeçe odluka u uslovnim strukturama 39

{ echo $tireqty.' tires<br />'; echo $oilqty.' bottles of oil<br />'; echo $sparkqty.' spark plugs<br />';}

Sloæenije logiåke procese moæete da gradite tako ãto ñete jedne iskaze if smeãtati unutar drugih. U sledeñem primeru ñe saæetak jedino biti prikazan ako je uslov $totalqty == 0 ispuçen, ali se posebno ispituju uslovi za svaki red saæetka.

if( $totalqty == 0){ echo 'You did not order anything on the previous page!<br />';}else{ if ( $tireqty>0 ) echo $tireqty.' tires<br />'; if ( $oilqty>0 ) echo $oilqty.' bottles of oil<br />'; if ( $sparkqty>0 ) echo $sparkqty.' spark plugs<br />';}

Iskazi elseifZa mnoge odluke koje donosite postoje viãe od dve opcije. Moæete da napravite redo-sled viãe opcija upotrebom iskaza elseif. Taj iskaz je kombinacija iskaza else i if. Program moæe da proverava svaki uslov po zadatom redosledu dok ne naœe onaj koji je ispuçen.

Za veñe porudæbine guma daje se popust:

n Maçe od 10 kupàenih guma – nema popustan 10–49 kupàenih guma – 5% popustan 50–99 kupàenih guma – 10% popustan 100 ili viãe kupàenih guma – 15% popusta

Moæete da napravite kôd za izraåunavaçe popusta upotrebom uslova i iskaza if i else. Dva uslova kombinujete u jedan pomoñu operatora koçunkcije (&&).

if( $tireqty < 10 ) $discount = 0;elseif( $tireqty >= 10 && $tireqty <= 49 ) $discount = 5;elseif( $tireqty >= 50 && $tireqty <= 99 ) $discount = 10;elseif( $tireqty >= 100 ) $discount = 15;

Reå elseif moæete da kucate tako ili s razmakom (else if) – oba naåina su ispravna.

Page 32: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 40

Ako nadovezujete viãe iskaza elseif, imajte u vidu da ñe samo jedan blok ili iskaz biti izvrãeni. 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. Da smo uslove napisali tako da viãe çih moæe isto-vremeno biti taåno, tada bi se izvrãavali samo blok ili iskaz iza prvog ispuçenog uslova.

Iskaz switchIskaz switch radi sliåno kao iskaz if, ali dozvoàava da uslov ima viãe od dve vredno-sti. U iskazu if, uslov moæe biti true ili false. U iskazu switch uslov moæe imati åitav niz razliåitih vrednosti, dokle god daje jednostavan tip (integer, double ili zna-kovni niz). Za svaku znaåajnu vrednost treba da napiãete iskaz case i, eventualno, podrazumevani iskaz case za sve ostale vrednosti.

Da biste saznali koja reklama privlaåi najviãe kupaca, u narudæbenici treba da dodate jedno pitaçe.

Ubacite sledeñi HTML u narudæbenicu, a obrazac ñe izgledati kao na slici 1.6.

<tr> <td>How did you find Bob's</td> <td><select name="find"> <option value = "a">I'm a regular customer <option value = "b">TV advertising <option value = "c">Phone directory <option value = "d">Word of mouth </select> </td></tr>

Slika 1.6 U narudæbenici pitamo posetioce kako su pronaãli prodavnicu.

Page 33: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Donoãeçe odluka u uslovnim strukturama 41

Navedeni HTML blok je dodao novu promenàivu obrasca åija vrednost ñe biti "a", "b", "c" ili "d". Tu promenàivu mogli biste da obradite nizom iskaza if i else na sledeñi naåin:

if($find == 'a') echo '<p>Regular customer.</p>';elseif($find == 'b') echo '<p>Customer referred by TV advert.</p>';elseif($find == 'c') echo '<p>Customer referred by phone directory.</p>';elseif($find == 'd') echo '<p>Customer referred by word of mouth.</p>';

Umesto toga, mogli biste da napiãete iskaz switch

switch($find){ case 'a' : echo '<p>Regular customer.</p>'; break; case 'b' : echo '<p>Customer referred by TV advert.</p>'; break; case 'c' : echo '<p>Customer referred by phone directory.</p>'; break; case 'd' : echo '<p>Customer referred by word of mouth.</p>'; break; default : echo '<p>We do not know how this customer found us.</p>'; break;}

Iskaz switch se ponaãa malo drugaåije od iskaza if i else. Iskaz if deluje na samo jedan iskaz, osim ako ste upotrebili vitiåaste zagrade i tako napravili blok iskaza. Iskaz switch se ponaãa drugaåije. PHP ñe izvrãavati iskaze od odgovarajuñe oznake case do iskaza break. Bez iskaza break, izvrãavaju se svi iskazi posle odgovarajuñe oznake case. Kada se doœe do iskaza break, biñe izvrãen red koda koji sledi posle iskaza switch.

Poreœeçe razliåitih uslovaAko vam ovi iskazi nisu mnogo bliski, mogli biste da se zapitate koji je najboài.

To nije pitaçe na koje moæemo da odgovorimo. Ne postoji niãta ãto moæete da ura-dite s jednim ili viãe iskaza else, elseif ili switch, a ne moæete sa skupom iskaza if. Trebalo bi da pokuãate da koristite uslovne iskaze koji ñe se u nekoj situaciji najlakãe åitati. Vremenom ñete steñi oseñaj koji iskaz treba da upotrebite.

Page 34: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 42

Petàe: ponavàaçe radçiRaåunari su oduvek bili dobri u jednoj stvari – automatizovaçu ponavàajuñih radçi. Ako postoji neãto ãto treba na isti naåin da se uradi mnogo puta, moæete da upotrebite petàu za ponavàaçe dela programa.

Treba da prikaæete tabelu sa troãkovima transporta koji ñe biti ukàuåeni u cenu naruåene robe. Troãkovi transporta zavise od razdaàine koju paket treba da preœe i izraåunavaju se po jednostavnoj formuli.

Tabela treba da izgleda kao na slici 1.7.

Listing 1.2 sadræi HTML koji prikazuje ovu tabelu i koji je, kao ãto moæete da vidite, dugaåak i sadræi delove koji se ponavàaju.

Listing 1.2 freight.html – HTML kôd za transportnu tabelu

<html><body><table border="0" cellpadding="3"><tr> <td bgcolor="#CCCCCC" align="center">Distance</td> <td bgcolor="#CCCCCC" align="center">Cost</td></tr><tr> <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>

Slika 1.7 Ova tabela prikazuje kako troãkovi transporta rastu s poveñaçem razdaàine.

Page 35: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Petàe: ponavàaçe radçi 43

<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, umesto åoveka kome treba platiti i kome brzo postane dosadno, HTML unosio neumorni raåunar. Petàe govore PHP-u da ponavàa iskaze ili blokove.

Petàa whileNajjednostavnija vrsta petàe u PHP-u je while. Kao i iskaz if, ona se oslaça na uslov. Razlika izmeœu petàe while i iskaza if je u tome ãto iskaz if izvrãava blok koda ako je uslov ispuçen, a petàa while izvrãava blok dokle god je uslov ispuçen.

Obiåno koristimo petàu while kada ne znamo koliko iteracija ñe biti potrebno. Kada je broj ciklusa unapred poznat, koristi se petàa for.

Osnovna struktura petàe while je:

while( uslov ) izraz;

Sledeña petàa while prikazañe brojeve od 1 do 5.

$num = 1;while ($num <= 5 ){ echo $num."<br />"; $num++;}

Na poåetku svake iteracije proverava se uslov. Ako uslov nije ispuçen, izraz neñe biti izvrãen i petàa ñe se zavrãiti, a zatim se prelazi na iskaz koji sledi iza petàe.

Petàu while moæete da upotrebite za neãto korisnije, kao ãto je prikazivaçe tran-sportne tabele, kao na slici 1.7.

U listingu 1.3 koristi se petàa while za pravàeçe transportne tabele.

Listing 1.3 freight.php – pravàeçe transportne tabele 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><?

Page 36: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 44

$distance = 50;while ($distance <= 250 ){ echo "<tr>\n <td align"="right">$distance</td>\n"; echo " <td align="right">". $distance / 10 ."</td>\n</tr>\n"; $distance += 50; }?></table></body></html>

Da bi dobijeni HTML kôd bio åitàiv, mora da sadræi znakove za nov red i razmake. Kao ãto je veñ reåeno, åitaåi ñe zanemariti te znake, ali su za àude oni vaæni. Ako ne dobijamo ono ãto smo oåekivali, åesto pregledamo HTML kôd.

U listingu 1.3 videñete \n. Kada je pod navodnicima, taj niz znakova predstavàa znak za novi red.

Petàe for i foreachNaåin na koji smo koristili petàu while veoma je uobiåajen. Prvo zadajte poåetnu vrednost brojaåa i zatim pre svake iteracije ispitujte taj brojaå u uslovu. Na kraju svake iteracije meçate brojaå.

Takvu vrstu petàe moæete da napiãete i u kompaktnijem obliku upotrebom petàe for.

Osnovna struktura petàe for je:

for( izraz1; uslov; izraz2) izraz3;

n izraz1 se izvrãava jednom na poåetku. U çemu obiåno zadajete poåetnu vred-nost brojaåa.

n Uslov se proverava pre svake iteracije. Ako nije ispuçen, iteracija prestaje. U uslovu obiåno proveravate da li je brojaå doãao do granice.

n Izraz2 se izvrãava na poåetku svake iteracije. On obiåno meça vrednost brojaåa.n Izraz3 se izvrãava jednom po iteraciji. Taj izraz je obiåno blok koda i sadræi naj-

veñi deo koda petàe.

Petàu while iz listinga 1.3 sada moæete da napiãete kao petàu for:

<?for($distance = 50; $distance <= 250; $distance += 50){ echo "<tr>\n <td align='right'>$distance</td>\n"; echo " <td align='right'>". $distance / 10 ."</td>\n</tr>\n";}?>

Page 37: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Izlazak iz upravàaåke strukture 45

Verzije for i while su funkcionalno identiåne. Petàa for je neãto kompaktnija jer ãtedi dva reda.

Te petàe su ravnopravne – nema boàe i loãije. Koristite onu koja vam viãe odgovara.Dodajmo da moæete da kombinujete promenàive promenàivih s petàom for radi

iteracije kroz niz ponavàajuñih poàa obrasca. Ako se, na primer, poàa zovu name1, name2, name3 itd, moæete da ih obradite na sledeñi naåin:

for ($i=1; $i <= $numnames; $i++){ $temp= "name$i"; echo $$temp.'<br />'; // obraœivaçe vrednosti iz poàa}

Dinamiåkim pravàeçem imena promenàivih moæete redom da pristupite svakom poàu.

Osim petàe for, postoji i petàa foreach, nameçena radu s nizovima. O çoj ñemo govoriti u poglavàu 3.

Petàe do..whilePosledçi tip petàe koji ñemo spomenuti ponaãa se neãto drugaåije. Opãta struktura petàe do..while je:

do izraz;while( uslov );

Petàa do..while se razlikuje od petàe while zbog toga ãto se uslov proverava na kraju. To znaåi da se u petài do..while iskaz ili blok unutar petàe uvek izvrãavaju naj-maçe jednom.

Åak i ako na poåetku uslov nije ispuçen i ako nikada ne moæe da bude ispuçen, petàa ñe biti izvrãena jednom pre nego ãto proveri uslov i zavrãi se.

$num = 100;do{ echo $num.'<br />';}while ($num < 1 );

Izlazak iz upravàaåke strukturePostoje tri naåina za prekidaçe dela koda:

Da biste prekinuli izvrãeçe petàe, upotrebite iskaz break, kao ãto smo rekli u odeàku o iskazu switch. Ako u petài koristite iskaz break, izvrãeçe skripta ñe se nastaviti od reda koji sledi posle petàe.

Ako æelite da skoåite na sledeñu iteraciju petàe, upotrebite iskaz continue.

Page 38: Kratak kurs PHP-a Snimaçe i åitaçe podataka Upotreba ... · Ako veñ programirate na PHP-u, ono ñe vam pomoñi da popunite neke praznine u znaçu a ako ste ranije koristili C,

E03B, June 21, 2004 9:36 am

Poglavlje 1 Kratak kurs PHP-a 46

Da biste zavrãili izvrãeçe åitavog PHP skripta, upotrebite exit. To je obiåno korisno kada se proveravaju greãke. Na primer:

if( $totalqty == 0){ echo 'You did not order anything on the previous page!<br />'; exit;}

Iskaz exit zaustavàa skript.

Ãta slediSada znate kako da primite porudæbinu i radite s çom. U sledeñem poglavàu pogleda-ñemo kako da saåuvate porudæbinu tako da ona kasnije moæe da se otvori i realizuje.