Promenljive u PHP-u prepoznajemo tako što na početku uvek stoji znak $ (dolar, string).
Znači ispred svake promenljive mora stojati znak $ iako se ona sastoji od samo jednog slova.
Takođe morate voditi računa o velikim i malim slovima u imenima promenljivih jer ih PHP razlikuje.
Na primer, $MojaPromenljiva i $mojapromenljiva nije isto.
Ime promenljive mora počinjati slovom, posle može sadržati brojeve ili neke druge znakove ali ne i razmak.
Razlika između PHP-a i nekih drugih programskih jezika je da kada sami uvodimo promenljive ne moramo ih prvo deklarisati kao što je neophpdno kod nekih drugih programskih jezika.
Promenljiva će biti kada joj prvi put dodelite vrednost. Promenljivima dodeljujete vrednost pomoću operatora za dodelu vrednosti (=).
Na primer:
$godine = 25;
$cena = 100,99;
$temperatura = - 5;
$ime = "Marko Marković";
Promenljivima možete dodeliti i vrednost drugih promenljivih. Na primer:
$jabuke = 3;
$kruske = $jabuke;
Tipvi promenljivih
Tip promenljive se odnosi na vrstu podataka koji se u njoj nalaze.
PHP podrzava sledeće osnovne tipove podataka:
-integer - celobrojni, koristi se za cele brojeve
-double ili float - pokretni zarez dvostruke preciznosti
-string - znakovni, koristi se za znakovne podatke
-boolean - logički, koristi se za podatke tipa tačno ili netačno
-array - niz, koristi se za čuvanje više podataka istog tipa
-object - objekt, koristi se za čuvanje primeraka, klasa
Postoje i dva specijalna tipa podataka NULL i resurs.
Promenljivama kojima nije dodeljena vrednost, koje su nedefinisane ili kojima je izričito dodeljena vrednost NULL, tipa su NULL.
Neke ugrađene funkcije npr. rad sa bazom podataka, vraćaju promenljive tipa resurs, koje predstavljaju spoljne resurse.
Promenljive promenljive
PHP podržava još jedan tip promenljive koji se zove promenljiva promenljiva (eng. variable variable). Ovakve promenljive daju mogućnost da imena promenljivih menjate dinamički.
Svi programski jezici puštaju da menjate vrednost promenljive ali ih nema mnogo koji dopuštaju da menjate tip promenljive, a još manje ih prihvata da menjate ime promenljive.
Promenljiva promenljiva se dobija kada se vrednost jedne promenljive koristi kao ime druge. Na primer:
$promenljiva1 = "jabuke";
$$promenljiva1 = 3;
Čime smo dobili promenljivu jabuke i dodelili joj vrednost 3.
Upotreba konstanti
Konstanta predstavlja određenu vrednost isto kao i promenljiva.
Vrednost koja se čuva u promenljivoj možete da menjate kad god vam zatreba, dok kod konstanti ta vrednost se zadaje jednom i više se ne može menjati.
Za definisanje konstanti koristimo funkciju define, na primer:
define ("imekonstante", "vrednost konstante");
Evo još jednog primera:
define ("VREME", "Suncano");
Znači definisali smo konstantu VREME i dodelili joj vrednost Sunčano.
Obratite pažnju da je ime konstante napisano velikim slovima, ta konvencija je preuzeta iz programskog jezika C, ona nije obavezna, već služi da olakša razlikovanje između promenljivih i konstanti, što će kasnije dovesti do lakšeg čitanja i održavanja koda.
Velika razlika između konstanti i promenljivih je ta da se ispred konstanti ne piše simbol za dolar ($).
Ako želite da uptrebite vrednost konstante, onda samo upišite njeno ime, na primer:
echo VREME;
Opseg važenja promenljive
Opseg važenja promenljive se odnosi na mesta u skripti na kojima je data promenljiva vidljiva.
U PHP-u postoji šest mogućnosti opsega važenja:
- Ugrađene super globalne promenljive vide se u celom skriptu.
- Konstante, kada ih deklarišete, uvek imaju globalnu vidljivost; a to znači da ih možete upotrebiti unutar i izvan funkcija.
- Globalne promenljive, deklarisane u skriptu vidljive su svuda u skriptu, ali ne i unutar funkcija.
- Promenljiva koju napravite unutar funkcije, a date joj isto ime kao promenljivoj koja je deklarisana kao globalna, upućuje na globalnu promenljivu
istog imena.
- Promenljive koje napravite unutar funkcije, a deklarišete kao statičke promenljive, ne vide se izvan funkcija, ali čuvaju svoje vrednosti između
dva izvršavanja funkcije.
- Promenljive koje napravite unutar funkcije lokalne su za funkciju i prestaju da postoje kada prestane izvršavanje funkcije.
Od verzije PHP-a 4.1 pa nadalje, za nizove $_GET i $_POST i za neke druge posebne promenljive, vaze drugačija pravila za opseg važenja.
To su superglobalne promenljive koje se vide svuda, u funkcijama i izvan njih.
Kompletan spisak superglobalnih promenljivih je:
- $GLOBALS - niz svih globalnih promenjivih.
- $_SERVER - niz serverskih promenljivih.
- $_GET - niz promenljivih koje se prosleđuju skriptu metodom GET.
- $_POST - niz promenljivih koje se prosleđuju skriptu metodom POST.
- $_COOKIE - niz kolačića.
- $_FILES - niz promenljivih koje se odnose na datoteke poslate sa klijentskog računara.
- $_ENV - niz promenljivih okruženja.
- $_REQUEST - niz svih promenljivih koje je korisnik poslao.
- $_SESSION - niz promenljivih sesije.
Operatori
Operatori su simboli koji omogućavaju izvršavanje operacija nad vrednostima i promenljivima.
Operatori mogu imati jedan, dva ili tri argumenata, stim što većina ima dva. Na primer operator dodele (=) ima dva argumenata, memorijsku lokaciju na levoj strani simbola = i izraz na desnoj strani. Ti argumenti se nazivaju operandi, vrednosti kojima se operiše.
Aritmetički operatori
Aritmetički operatori su vrlo jednostavni, to su obični znakovi za računske operacije.
Tabela: Aritmetički operatori
Operator
Ime
Primer
+
sabiranje
$a + $b
-
oduzimanje
$a - $b
*
množenje
$a * $b
/
deljenje
$a / $b
%
modulo
$a % $b
Rezultat operacije svakog operatora se može sačuvati u nekoj promenljivoj.
Na primer:
$result = $a + $b;
Rezultat tih operacija je zbir, odnosno razlika vrednosti koja se nalazi u promenljivama $a i $b.
Znak za oduzimanje može da se koristi i kao unarni operator (operator sa jednim operandom) za negativne brojeve. Na primer:
$a = -1;
Množenje i deljenje se takođe isto odvijaju kao i matematičke operacije istog imena.
Operator modulo vraća ostatak celobrojnog deljenja promenljive $a promenljivom $b. Na primer;
$a = 27;
$b = 10;
$result = $a % $b;
Vrednost promenljive $result biće ostatak celobrojnog deljenja 27 sa 10, dakle 7.
Aritmetički operatori se obično primenjuju na brojeve, ako ih primenite na znakove, PHP će pokušati da pretvori znakovnu vrednost u broj.
Operatori za znakovne vrednosti
Jedini operator za znakovne vrednosti je operator za nadovezivanje (.) znakovnih vrednosti. Možete ga upotrebiti za spajanje dve znakovne vrednosti, na primer:
$a = "Marko";
$b = "Marković";
$result = $a.$b;
Dakle promenljiva $result će vratiti vrednost Marko Marković.
Operatori dodele
Osnovni operator dodele je (=), na primer:
$jabuke = 3;
Ovo bi trebalo čitati kao: promenljivoj $jabuke dodajemo vrednost 3.
Operator dodele takođe vraća određenu vrednost, slično drugim operatorima, na primer kada zadate:
$a + $b
vrednost ovog izraza je zbir promenljivih $a i $b. Slično tome vrednost izraza:
$a = 0;
je nula.
To omogućava da napišete izraze poput:
$b = 6 + ($a = 5);
Promenljiva $b dobija vrednost 11.
Za sve operatore dodele vazi sledeće pravilo: vrednost celog iskaza dodele je vrednost koja je dodeljena operandu na levoj strani.
Kombinovani operatori dodele
Osim jednostavnih postoje i kombinovani operatori dodele.
Svaki od njih je skraćenica za izvršavanje određene operacije nad promenljivom i upisivanja rezultata u tu promenljivu.
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 nadovezivanja znakovnih vrednosti.
Tabela: Kombinovani operatori dodele
Operator
Upotreba
Ekvivalentan 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
Prefiksno i sufiksno uvećanje i umanjenje
Prefiksni i sufiksni operatori uvećanja ++ i umanjenja -- slični su operatorima += i -=, uz neke specifičnosti.
Operatori uvećanja imaju dva efekta, oni prvo povećaju tekuću vrednost a zatim je dodeljuju. Na primer:
$a = 4;
echo ++$a;
U drugom redu je korišćen prefiksni operator uvećanja, koji se zove tako što se ++ pojavljuje ispred $a. Prvo se vrednost $a poveća za 1, a zatim se ta uvećana vrednost dodeljuje istoj promenljivoj. Tako je vrednost promenljive $a povećana na 5, a zatim se vrednost 5 učitava iz promenljive i ispisuje.
Međutim ako je ++ posle $a to je sufiksni operator uvećanja, koji deluje drugačije. Na primer:
$a = 4;
echo $a++;
Sada je efekat suprotan, prvo se tekuća vrednost promenljive $a učitava i ispisuje, a zatim se povećava. Vrednost celog izraza je 4 i vrednost se ispisuje. Vrednost $a posle ovog iskaza je 5.
Slično se ponaša i operator --, stim što se vrednost $a umanjuje.
Reference
Operator referenca (& ampersend), može se koristiti u kombinaciji sa operatorima dodele. Kada se jedna promenljiva dodeljuje drugoj, obično se pravi kopija prve promenljive koja se smešta negde u memoriju.
Na Primer:
$a = 5;
$b = $a;
Znači pravimo kopiju vrednosti u promenljivoj $a i smeštamo je u promenljivu $b. Ako izmenimo vrednost promenljive $a, vrednost promenljive $b se neće menjati.
$a = 7; // $b je i dalje 5
Kopiranje možete da izbegnete pomoću operatora reference &. Na primer:
$a = 5;
$b = &$a;
$a = 7; // $a i $b su sada 7
Referenca se ponaša sličnije drugom imenu nego pokazivaču. I $a i $b upućuju na isti blok memorije, to možete izmeniti ako poništite definiciju jedne od promenljivih, na sledeći način:
unset ($a);
Poništavanjem definicije promenljive $b (7) ne menja se njena vrednost, ali se prekida veza između $a i vrednosti 7 koja se čuva u memoriji.
Operatori poređenja
Operatori poredjenja se koriste za poredjenje dve vrednosti. Izrazi koji koriste operatore poredjenja kao rezultat daju logičku vrednost true (istina) ili false (laž) u zavisnosti od rezultata poredjenja.
Operator poređenja (==) dva znaka jednakosti, omogućava da ispitate da li su dve vrednosti jednake, na primer:
$a == $b
ispituje da li su vrednosti $a i $b iste. Rezultat će biti true ako su jednaki ili false ako nisu.
Ovaj operator se lako brka sa operatorom dodele (=). Ako upotrebite pogrešan operator neće doći do greške ali nećete dobiti ni željeni rezultat. Na primer:
$a = 5;
$b = 7;
Rezultat izraza $a i $b biće true. Zašto? Vrednost izraza $a = $b je dodeljena levoj strani, što je u ovom slučaju 7. Pošto je to vrednost različita od nule, rezultat izraza je true. Ako bi ste napisali $a == $b rezultat bi bio false.
Operator (===) identičnosti, on vraća true samo ako su oba operanda jednaka i istog tipa.
Na primer, rezultat poređenja 0 == '0' je true, ali 0 === '0' nije, jer je prva nula celobrojnog tipa a druga znakovnog.
Tabela: Operatori poređenja
Operator
Ime
Upotreba
= =
jednako
$a = = $b
= = =
identično
$a = = = $b
!=
različito
$a != $b
!= =
nijeidentično
$a != = $b
<>
različito
$a <> $b
<
manje od
$a < $b
>
veće od
$a > $b
<=
manje ili jednako
$a <= $b
>=
veće ili jednako
$a >= $b
Logički operatori
Logički operatori se koriste za kombinovanje rezultata logičkih uslova. Na primer želite da utvrdite da li je vrednost promenljive $a između 0 i 100. Rešenje je da proverite da li su ispunjena oba uslova: $a >= 0 i $a <= 100. To omogućava operator logičke konjunkcije (AND):
$a >= 0 && $a <= 100
PHP podržava logičke operacije konjunkcije (AND), disjunkcije (OR), isključive disjunkcije (XOR) i negacije (NOT).
Tabela: Logički operatori
Operator
Ime
Upotreba
Rezultat
!
negacija
!$b
vraća true ako je $b false i obratno
&&
konjunkcija
$a && $b
vraća true ako su $a i $b true, u protivnom vraća false
| |
disjunkcija
$a | | $b
vraća true ako su $a i $b ili oba true, u protivnom vraća false
and
konjunkcija
$a and $b
isto kao && ali sa nižim prioritetom
or
disjunkcija
$a or $b
isto kao | | ali sa nižim prioritetom
Operatori nad bitovima
Operatori nad bitovima omogućavaju da ceo broj obrađujete kao grupu bitova koja ga predstavlja u memoriji. U PHP-u ih verovatno nećete često upotrebljavati.
Tabela: Operatori nad bitovima
Operator
Ime
Upotreba
Rezultat
&
konjunkcija
$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 ~ $b
Bitovi koji su aktivni u $b nisu aktivni u rezultatu i obrnuto
^
isključiva disjunkcija
$a ^ $b
Bitovi koji su aktivni ili u $a ili u $b ali ne u oba, aktivni su u rezultatu
<<
pomeranje ulevo
$a << $b
Pomera bitove $a ulevo za $b mesta
>>
pomeranje udesno
$a >> $b
Pomera bitove $a udesno za $b mesta
Ostali operatori
Operator zarez “ , “ koristi se ze razdvajanje argumenata funkcija i stavki u spisku.
Operatori “ new “ i “ - > “ koriste se za pravljenje objekta odnosno za pristup članovima objekta.
Operatori elementa niza “ [ ] “ omogućavaju pristupu elementima niza. Takodje za to može da se koristi i operator “ => “.
Uslovni operator ima oznaku “ ? : “ . Efekat ovog operatora najbolje možemo videti na primeru:
($ocena > 5 ? $b=’Položio’ : $b=’Pao’);
Ovaj izraz dodeljuje 'Položio' ili 'Pao' u zavisnosti od ocene.
Operator zanemarivanja greške @, može se uptrebiti ispred svakog izraza.
Na primer:
$a = @ (57/0);
Bez operatora @ izvršno okruženje bi generisalo upozorenje "delite nulom". A ako upotrebite ovaj operator greška se zanemaruje.
Operator izvršenja ima oznaku `` (inverzni polunavodnici).
Sve što se nalazi između inverznih polunavodnika PHP pokušava da izvrši kao komandu zadatu na komandnoj liniji servera.
Na primer, u operativnim sistemima tipa Unix možete da upotrebite:
$out = `ls – la`;
echo $out;
Ekvivalent tome na windows serveru bi bilo:
$out = `dir c:`;
echo $out;
Obe verzije će generisati spisak dokumenata iz direktorijuma u promenjljivu $out.
Operatori za rad sa nizovima
Postoji više operatora za rad sa nizovima. Operator za element niza [] omogućava pristup pojedinim elementima niza.
Operator => može se u nekim kontekstima primeniti i na nizove.
Tabela: Operatori za rad sa nizovima
Operator
Ime
Uptreba
Rezultat
+
unija
$a + $b
vraća niz koji se sastoji od svih elemenata $a i $b
= =
jednako
$a = = $b
vraća true ako $a i $b imaju jednake elemente
= = =
identično
$a = = = $b
vraća true ako $a i $b imaju jednake elemente u jednakom redosledu
!=
različito
$a != $b
vraća true ako je $a različit od $b
<>
različito
$a <> $b
vraća true ako je $a različit od $b
!= =
nije identično
$a != = $b
vraća true ako je $a nije identičan$b
Operator za utvrđivanje tipa
Za utvrđivanje tipa objekta postoji samo jedan operator: instanceof.
Koristi se u objektno orijentisanom programiranju.
Operator instanceof omogućava da ispitate da li je određeni objekat primerak zadate klase. Na primer:
class nekaKlasa{};
nekiObjekat = new nekaKlasa();
if (nekiObjekat instanceof nekaKlasa)
echo "nekiObjekat je primerak klase nekaKlasa";
Prioriteti i asocijativnost
Svaki operator ima određeni prioritet ili redosled kojim se izračunava.
Operatori takođe imaju i asocijativnost, tj. redosled kojim se operatori jednakog prioriteta izračunavaju.
Asocijativnost može biti sleva nadesno, zdesna nalevo ili nije bitna (n/b).
Tabela: Prioritet operatora
Asocijativnost
Operatori
leva
,
leva
or
leva
xor
leva
and
desna
print
leva
= += -= *= /= .= %= &= |= ^= ~= <<= >>=
leva
? :
leva
| |
leva
&&
leva
|
leva
^
leva
&
n/b
= = != = = =
n/b
< <= > >=
leva
<< >>
leva
= - .
leva
* / %
desna
! ~ ++ - - (int) (double) (string) (array) (object) @
desna
[]
n/b
new
n/b
( )
Operator sa najvišim prioritetom su obične zagrade ().
One deluju tako što povećavaju prioritet svega što se nalazi između njih.
Pomoću njih možete namerno da zaobiđete pravila prioriteta kada je potrebno. Na primer:
$a = (3 + 2) * 5;
vrednost promenljive biće 25, a da smo napisali
$a = 3 + 2 *5;
dobili bi smo 13, zbog toga što operacija množenja ima viši prioritet od operacije sabiranja.
U izrazu možete upotrebiti neograničen broj zagrada i uvek će se prvo izračunavati one najviše ugnježdene.
Postoji još jedan operator koji nismo pomenuli a to je komanda jezika PHP: print. Ova komanda je ekvivalentna komandi echo. Obe komande generišu izlazne podatke. Koju će te od ove dve komande koristiti ostaje na vama.
Funkcije za rad sa promenljivim
Postoji biblioteka funkcija koja omogućava da na razne načine obrađujete i ispitujete promenljive.
Ispitivanje i menjanje tipova promenljivih
Većina funkcija za rad sa promenljivima služi za ispitivanje tipova podataka. Dve najopštije funkcijje su gettype() i settype().
Funkcija gettype() utvrđuje tip promenljive koju joj prosledite i vraća znakovnu vrednost sa imenom tipa, koje može biti boolean, integer, double, string, array, object, resource ili NULL. A ako nije ni jedan od standardnih tipova, funkcija vraća tekst uknown type.
Funkcija settype() menja tip promenljive koju joj prosledite u novi tip u obliku znakovne vrednosti u drugom argumentu. To može biti jedan od tipova sa predhodne liste.
Primer:
$a =56;
echo gettype($a).'
';
settype($a, 'double');
echo gettype($a).'
';
U prvom pozivu funkcije gettype, promenljiva $a je celobrojnog tipa.
Nakon ozivanja funkcije settype, tip promenljive $a je promenjen u double.
Postoje i funkcije za ispitivanje tipova podataka. Te funkcije su:
- is_array
- is_double, is_float, is_real, (sve je to ista funkcija)
- is_long, is_int, is_integer, (sve je to ista funkcija)
- is_string
- is_object
- is_resource()
- is_null()
- is_scalar - ispituje da li je promenljiva skalarnog tipa
- is_numeric - ispituje da li je promenljiva neka vrsta broja ili
znakovne vrednosti koja se može pretvoriti u broj
- is_callable - ispituje da li vrednost promenljive ima postojeće funkcije
Ispitivanje stanja promenljive
Postoji nekoliko funkcija za ispitivanje stanja promenljivih.
Funkcija isset ima sledeći prototip:
boolean isset (promenljiva);
Funkcija isset vraća true ako je promenljiva definisana, a u suprotnom vraća false. Funkciji možete proslediti i listu imena razdvejenih zarezima, a isset će vratiti true ako su definisane sve promenljive na listi.
Definiciju promenljive možete poništiti pomoću funkcije unset, koja ima prototip:
void unset (mixed promenljiva);
Funkcija unset poništava definiciju promenljive koju joj prosledite.
Fumkcija empty ispituje da li promenljiva postoji i da li ima vrednost koja nije nula odnosno nije prazna, i vraća true ili false.
Funkcija empty ima sledeći prototip:
boolean empty (mixed var);
Ponovno interpretiranje promenljivih
Sledeće tri funkcije imaju isti efekat kao konverzija promenljive:
int intval (mixed promenljiva [, int baza]);
float floatval (mixed promenljiva);
string strval (mixed promenljiva);
Sve tri funkcije vraćaju vrednost prosleđene promenljive, konvertovanu u odgovarajući tip redom u ceo broj, u realan broj i u znakovnu vrednost