Sunteți pe pagina 1din 20

InfoAcademy

www.infoacademy.net
Ionut Cristian Morar
rev. 479

2 ELEMENTE FUNDAMENTALE ALE LIMBAJULUI PHP (I)

2.1. INTRODUCERE............................................................................................................................................................................2
2.2. INSTRUCTIUNI PHP SI SEPARAREA LOR..............................................................................................................................2
2.3. COMENTARII...............................................................................................................................................................................2
2.4. VARIABILE...................................................................................................................................................................................3
2.4.1. Ce este o variabila..................................................................................................................................................................3
2.4.2. Numele variabilelor in PHP...................................................................................................................................................3
2.4.3. Crearea, initializarea si stergerea unei variabile..................................................................................................................4
2.4.4. Tipul de date al unei variabile...............................................................................................................................................4
2.4.5. Afisarea valorii variabilelor...................................................................................................................................................5
2.4.6. Variabile predefinite...............................................................................................................................................................6
2.5. TIPURI DE DATE PHP.................................................................................................................................................................7
2.5.1. Prezentare..............................................................................................................................................................................7
2.5.2. bool (sinonim: boolean).........................................................................................................................................................7
2.5.2.1. Descriere si modalitati de specificare................................................................................................................................................7
2.5.2.2. Utilitatea tipului de date boolean....................................................................................................................................................... 8
2.5.3. int (sinonim: integer)..............................................................................................................................................................8
2.5.4. float (sinonim: double)...........................................................................................................................................................9
2.5.5. string.......................................................................................................................................................................................9
2.5.5.1. Descriere generala............................................................................................................................................................................. 9
2.5.5.2. Modalitati de definire........................................................................................................................................................................ 9
2.5.5.2.1. Includerea valorii intre ghilimele...............................................................................................................................................9
2.5.5.2.2. Includerea valorii intre apostroafe...........................................................................................................................................11
2.5.5.2.3. Includerea valorii intr-o constructie de tip "heredoc"..............................................................................................................11
2.5.5.2.4. Numere memorate ca string.....................................................................................................................................................11
2.6. CONSTANTE..............................................................................................................................................................................12
2.6.1. Prezentare si tipuri...............................................................................................................................................................12
2.6.2. Constante definite de programator......................................................................................................................................12
2.6.3. Constante predefinite...........................................................................................................................................................13
2.6.3.1. Constante predefinite standard si utilitatea lor.................................................................................................................................13
2.6.3.2. Magic constants............................................................................................................................................................................... 14
2.7. OPERATORI................................................................................................................................................................................14
2.7.1. Descriere generala...............................................................................................................................................................14
2.7.2. Operatori aritmetici.............................................................................................................................................................14
2.7.3. Operatori de atribuire..........................................................................................................................................................14
2.7.4. Operatorul de cast (conversie explicita)..............................................................................................................................15
2.7.5. Operatori de incrementare si decrementare........................................................................................................................15
2.7.6. Operatori de comparare.......................................................................................................................................................15
2.7.7. Operatori logici....................................................................................................................................................................16
2.7.8. Operatori la nivel de bit.......................................................................................................................................................17
2.7.9. Operatori pentru string-uri..................................................................................................................................................17
2.7.9.1. Concatenarea string-urilor............................................................................................................................................................... 17
2.7.9.2. Accesarea individuala a caracterelor componente ale stringului......................................................................................................18
2.7.10. Operatorul ternar...............................................................................................................................................................18
2.7.11. Null coalesce operator.......................................................................................................................................................19
2.8. BIBLIOGRAFIE..........................................................................................................................................................................19
2.9. ANEXA 1 – TABEL DE CONVERSIE INTRE TIPURILE DE DATE PHP..............................................................................................20

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
1
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479

2.1. INTRODUCERE

Ceea ce face calculatorul mai bine decat noi este sa proceseze date, iar pentru aceasta programatorul are nevoie de
urmatoarele elemente fundamentale ale unui limbaj de programare:
• o modalitate de a specifica locatia datelor ce se doresc a fi prelucrate
• un mod de a preciza sau impune natura datelor ce fac subiectul prelucrarii (numere, text etc)
• modalitati de a efectua operatii cu datele, de a agrega date existente pentru a crea informatii noi

Aceste 3 necesitati se materializeaza in cazul PHP (si nu numai) in urmatoarele notiuni:


• variabile – zone de memorie referite printr-un nume (numit si identificatorul variabilei in cauza) care permit
programatorului sa indice datele pe care doreste sa le prelucreze programul folosind o simpla eticheta text si nu o
adresa de memorie
• tipuri de date – variabilele pot avea valori de diverse naturi: numere intregi, numere cu zecimale, valori de
adevar, siruri de caractere etc. De tipul de date al variabilei depind spatiul ocupat in memorie, structura zonei de
memorie corespunzatoare si operatiile care se pot aplica variabilei
• operatori – elemente de sintaxa ale limbajului care aplica o operatie uneia sau mai multor valori, producand un
rezultat nou pe baza unor valori deja existente (ex: adunarea a doua numere)

Toate aceste elemente sunt puse laolalta in instructiuni - comenzi date calculatorului in cadrul unui program.

2.2. INSTRUCTIUNI PHP SI SEPARAREA LOR


Un program PHP este format dintr-un ansamblu de instructiuni, care pot fi de doua feluri:

• instructiuni simple – in cele mai dese cazuri sunt instructiuni de o linie, desi pot fi impartite in mai multe linii
daca programatorul o doreste. Ele trebuie sa se incheie intotdeauna cu caracterul ; (punct si virgula) cu exceptia
cazului in care instructiunea in cauza este ultima dinaintea delimitatorului de final al sectiunii de cod PHP, caz in
care delimitatorul de final poate fi omis (vezi exemplul de mai jos)

• instructiuni compuse (bloc) – reprezinta un ansamblu de instructiuni inclus intre {} si care NU se mai incheie cu
; ca in cazul instrucitunilor simple
Exemplu – instructiuni simple:

<?php
echo "Acest text va fi afisat pe ecran ";
# Putem omite delimitatorul de final ';' inainte de inchiderea sectiunii de cod:
echo "sau in browser"
?>

Exemplu – instructiuni compuse (exemplul foloseste instructiuni decizionale, care vor fi invatate intr-o lectie ulterioara):

if($a == 4){ # instructiune decizionala simpla; daca valoarea lui $a este 4,


$a = 0; # se executa instructiunile dintre acolade
echo "Variabila resetata";
} # nu mai folosim delimitatorul de final ;

2.3. COMENTARII

Comentariile sunt portiuni de text inserate in codul sursa al unui program cu scop pur informativ (documentarea codului)
si care sunt ignorate de catre interpretorul PHP. Pentru a fi tratate ca atare, ele trebuie marcate folosind una dintre
modalitatile urmatoare:
• comentarii de o linie, varianta 1 (pe stil C) – incep cu //. Interpretorul va ignora portiunea de linie incepand cu //,
fie pana la sfarsitul liniei, fie pana la intalnirea tagului de inchidere a sectiunii PHP
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
2
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
• comentarii de o linie, varianta 2 (pe stil Perl sau scripturi de shell Unix) – incep cu #. Acelasi comportament ca
cele de mai sus

<html><body>Continut:<br />
<?php
echo "Text"; // restul acestei linii (incepand cu //) este ignorat de catre interpretor
echo "More text"; # acelasi efect, dar incepand cu caracterul #
echo "Iata-ne la "; // in ciuda comentariului, textul "sfarsit" se va afisa ?>sfarsit
</body></html>

• comentarii ce se extind pe mai multe linii – sunt cuprinse intre /* si */. Nu sunt permise comentariile de acest fel
imbricate (cuprinse unul in altul)

/* Portiune de cod comentata integral:


echo 'Executia a ajuns in acest punct';
// mesajul din echo NU va fi afisat
*/

2.4. VARIABILE
2.4.1. Ce este o variabila

In programare, variabilele sunt zone de memorie in care se stocheaza date si la care programatorul se refera folosind un
nume (o eticheta text), numit si identificatorul variabilei. Cand programul este lansat in executie, datele sunt incarcate in
memorie la o anumita adresa (care in general difera de la o rulare la alta), pe care programatorul nu o poate cunoaste in
momentul scrierii programului. Variabilele ii dau posibilitatea programatorului de a se referi la zonele de memorie in care
sunt stocate datele programului folosind nume, independent de locatia efectiva in care vor fi ele memorate la rularea
programului.

Dupa cum o indica si denumirea, o variabila poate primi de-a lungul executiei programului diferite valori succesive, in
functie de operatiile in care este implicata. In zona de memorie corespunzatoare variabilei poate fi memorata initial
valoarea 5, apoi 13, apoi 45 etc. O particularitate a variabilelor PHP este aceea ca o variabila poate primi succesiv valori
de tipuri diferite (ex: initial valoarea sa este 45, apoi sirul de caractere "PHP", apoi valoarea de adevar TRUE (adevarat)
etc).

2.4.2. Numele variabilelor in PHP

Numele de variabile PHP incep intotdeauna cu $, urmat de o combinatie de litere, cifre si underscore ( _ ) . Primul
caracter de dupa $ este obligatoriu litera sau underscore.

Atentie! Numele de variabile PHP sunt case-sensitive, in vreme ce numele de functii si clase nu sunt!

Exemplu – nume de variabile valide:

$a = 3; // se creaza variabila cu numele $a careia i se asigneaza valoarea 3


$A = 5; //se creaza o alta variabila numita $A careia i se asigneaza valoarea 5.
// $a si $A sunt variabile distincte!
$_x="text"; // crearea variabilei cu numele $_x care primeste o valoare de tip string

Exemplu – nume de variabile invalide:

$6din49 = 56; // invalid, deoarece dupa $ urmeaza cifra


$alba-neagra = "gri"; // invalid, deoarece contine caracterul -

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
3
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
Numele de variabile care incep cu $_ si continua cu majuscule este bine sa fie evitate, deoarece acesta este prefixul folosit
pentru multe dintre variabilele PHP predefinite (ex: $_GET, $_POST etc). Daca riscam si folosim in programele noastre
un astfel de nume de variabila, chiar daca nu exista momentan acel nume predefinit, este posibil ca el sa apara intr-o
versiune viitoare de PHP si astfel programele scrise de noi sa nu mai functioneze dupa un eventual upgrade.

2.4.3. Crearea, initializarea si stergerea unei variabile

In PHP, variabilele NU se declara inaintea folosirii! In alte limbaje, o declaratie de forma int x; specifica de la bun
inceput tipul de date al variabilei si rezerva un identificator (nume), astfel incat compilatorul/interpretorul putea verifica
daca o variabila a fost definita inaintea folosirii; in PHP, neexistand declarare, o variabila este creata pur si simplu
atribuindu-i o valoare:

# initializarea unei variabile cu o valoare


$a = 5; // este creata variabila $a; in locatia sa de memorie se stocheaza valoarea 5
$a = 7; // valoarea precedenta din memorie (5) este inlocuita (suprascrisa) cu valoarea 7
echo $a; // afisarea valorii lui $a – se afiseaza 7

O variabila poate fi stearsa folosind functia predefinita unset:

$a = 3;
unset($a);
# in acest moment variabila $a nu mai este definita

Daca incercam sa citim valoarea unei variabile nedefinita inca (sau stearsa anterior cu unset), interpretorul va emite o
eroare de tip Notice si va considera ca variabila in cauza are valoarea NULL (case-insensitive; vezi sectiunea despre
tipuri de date) care in functie de context se poate converti automat la sirul vid "", 0, false etc.

unset($b); # variabila $b a fost stearsa


echo $b; # $b nu exista; se va considera ca valoarea lui e null, care convertit la string
# va afisa sirul vid "" (pe ecran neaparand astfel nimic). In plus, este posibil sa se
# afiseze si un mesaj de eroare de tip notice, in functie de configurarea PHP

Nota: putem verifica daca o variabila a fost sau nu definita folosind functia predefinita isset().

Atentie! O variabila creata de programator exista doar pe durata executiei fisierului in care a fost definita! Daca
definim o variabila intr-un fisier PHP, ea nu se va vedea in altele.

2.4.4. Tipul de date al unei variabile

Variabilele PHP pot fi folosite pentru a memora date de diverse feluri – iata cateva exemple:
• date numerice – prin intermediul tipului de date int (numere intregi) sau float (numere cu zecimale)
• valori de adevar – tipul de date boolean
• siruri de caractere – tipul de date string

(Pentru o discutie detaliata a listei complete de tipuri de date consultati sectiunea din material dedicata lor)

PHP este un limbaj loosely-typed. Aceasta inseamna ca tipul de date al unei variabile PHP se poate schimba de-a
lungul existentei variabilei, odata cu fiecare valoare atribuita acesteia. Este posibil ca la un moment dat o variabila sa
aiba valoarea numerica 23, iar mai apoi sa capete ca valoare sirul de caractere "text" si ulterior valoarea de adevar
FALSE. Aceasta spre deosebire de alte limbaje (ex: C,Java), in care tipul de date al unei variabile era stabilit la declararea
acesteia si nu se modifica de-a lungul programului.

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
4
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
$a = 45; echo gettype($a); // integer (numar intreg)
$a = "patruzecisicinci"; echo gettype($a); // string (sir de caractere)

Nota: daca se doreste aflarea sau verificarea tipului de date al unei variabile, PHP pune la dispozitie functii predefinite
precum: gettype(), var_dump(), is_float(), is_int(), is_string(), is_bool(), is_array(), is_object(), is_resource(),
is_null().

2.4.5. Afisarea valorii variabilelor

PHP ofera un set bogat de functii predefinite si constructii ale limbajului 1 care permit afisarea valorii variabilelor, oricare
ar fi tipul de date al acestora. Ele nu sunt insa echivalente: unele sunt gandite pentru transmiterea de continut text catre
client dar nu sunt potrivite pentru vizualizarea valorii exacte a unei variabile in scopuri de diagnostic, pe cand altele sunt
create special in scopuri de debugging fara a insista insa pe formatarea informatiei.

Printre functiile si constructiile disponibile se numara:

• echo ($arg1, $arg2, …) - nu este functie, ci constructie a limbajului. Poate primi unul sau mai multe argumente
separate prin virgula, pe care le converteste la string (daca sunt de alt tip de date) inainte de a le afisa valoarea.
Se poate apela cu sau fara paranteze.

Exemple:

$a = 5; $b = 6; # se creeaza doua variabile de tip int, initializate cu valorile 5 si 6


echo ($a); # afiseaza 5 (valoarea lui $a convertita in prealabil la string)
echo $b; # folosire fara paranteze; afiseaza valoarea lui $b – numarul intreg 6
echo $a,$b; # afiseaza 56 (valoarea lui $a urmata imediat de valoarea lui $b)
$a = 5; $b = false; # de data aceasta $b are tipul de date boolean
echo $a,$b; # afiseaza 5 (valoarea lui $a); valoarea lui $b este convertita la string
# rezultand sirul vid "", care la afisarea pe ecran nu produce nici un efect

Argumentele lui echo pot fi valori simple (scrise ca atare in codul sursa) sau intregi expresii; in cel de-al doilea caz,
expresiile sunt evaluate iar valoarea lor este convertita la string daca este cazul si apoi afisata:

$a = 4; # este creata variabila $a de tip int initializata cu valoarea 4


echo $a+2, $a*2; # se afiseaza 68 (4+2 = 6, 4*2 = 8, ambele rezultate sunt convertite la string)

• print(string $arg) – constructie de limbaj foarte asemanatoare cu echo, dar care primeste un singur argument si
returneaza intotdeauna 1. Ca si echo, isi converteste parametrul la string si poate fi folosit cu sau fara paranteze in
jurul argumentului:

$a = 5; $b = 6; #crearea a doua variabile de tip int, initializate cu valorile 5 si 6


echo ($a); # afisarea valorii lui $a – numarul intreg 5 convertit la string
print($b); # afiseaza valoarea lui $b – numarul intreg 6 convertit la string
echo $a,$b; # afiseaza valorile ambelor variabile, una dupa alta (concatenate)
print $a,$b; # eroare, print nu accepta mai multe argumente
echo (print($a)); # 51 – intai se executa print, apoi este afisat rezultatul returnat de print,
# adica 1
print(echo($a)); # eroare, fiindca echo nu este functie si nu returneaza nimic, asadar
# nu poate fi folosit ca argument pentru print

Nota: print produce intotdeauna rezultatul 1; in schimb echo nu intoarce niciun rezultat, ceea ce inseamna ca nu poate fi
folosit in expresii. Spre exemplu, putem scrie echo 10+print(20); (ceea ce va afisa 2011) insa daca incercam print
10+echo(20); vom primi o eroare.

1
constructii ale limbajului (language constructs) = cuvinte cheie recunoscute de catre interpretor care seamana cu functiile prin modul
de apelare insa nu au toate caracteristicile functiilor, diferind prin sintaxa, valoare returnata (care poate lipsi) etc.
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
5
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
• print_r($expresie [, bool $return] ) – printeaza sau returneaza valoarea expresiei (in functie de valoarea lui
$return). NU printeaza tipul de date al expresiei, spre deosebire de var_dump(). Este in general util la afisarea
tablourilor, deoarece afiseaza in mod recursiv fiecare element al tabloului (spre deosebire de echo si print care ar
afisa doar "Array")

$tablou = array(1, 2, 3);


echo $tablou; # afiseaza Array
print_r($tablou); /* Afiseaza:
Array
(
[0] => 1
[1] => 2
[2] => 3
)*/

• var_dump($expr1,$expr2,…) – cea mai completa functie pentru afisarea variabilelor in scop de debugging;
afiseaza atat tipul de date cat si valoarea expresiei primite ca argument, pentru tablouri afiseaza fiecare element si
tipul sau de date, in mod recursiv:

$a = false;
echo $a; # nu afiseaza nimic, deoarece false convertit la string produce sirul vid “”
$tablou = array(1, 2, 3);
echo $tablou; # afiseaza Array
var_dump($tablou); /* Afiseaza:
array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
}
*/

Nota: PHP ofera si functia predefinita var_export(), similara cu var_dump() insa care produce o reprezentare PHP valida
a resursei in cauza (una care poate fi atribuita direct unei variabile).

2.4.6. Variabile predefinite

In cadrul unui program PHP sunt disponibile doua tipuri de variabile:


• variabile definite de catre programator (conform regulilor expuse mai sus)
• variabile predefinite, care au urmatoarele caracteristici esentiale:
◦ contin date provenite de la clientul/utilizatorul web si informatii importante despre serverul web, client,
conexiune
◦ sunt vizibile automat in orice context al programului (inauntrul sau in afara functiilor, structurilor de control
etc) fara ca programatorul sa trebuiasca sa ia vreo masura in acest sens. Din acest motive mai sunt numite si
"superglobals"

Iata cateva dintre variabilele PHP predefinite. Detalii despre continutul si utilizarea lor vor fi incluse intr-o lectie viitoare.

Variabila Descriere
$_SERVER informatii oferite de serverul web: headere HTTP primite de la client, calea catre script, informatii despre server
$_GET input provenit de la utilizator: variabile pasate programului PHP prin intermediul comenzii HTTP GET
(ex: http://www.example.com/index.php?id=132&page=4 ) - informatii intr-o lectie ulterioara
$_POST variabile pasate programului PHP prin intermediul comenzii HTTP POST (de exemplu, cand utilizatorul completeaza
un formular si apoi apasa Submit)
$_COOKIE informatii stocate anterior de catre server pe hard-disk-ul clientului sub forma de cookies si retrimise serverului la
urmatoarea cerere HTTP efectuata de client
$_SESSION variabile de sesiune (variabile ale calor valori se pastreaza intre doua cereri succesive ale clientului HTTP)

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
6
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
2.5. TIPURI DE DATE PHP
2.5.1. Prezentare

Tipurile de date PHP pot fi impartite in urmatoarele categorii:


• tipuri de date scalare - variabilele de acest tip pot memora o singura valoare la un moment dat
◦ numerice – int (numere intregi) si float (numere cu zecimale)
◦ valori de adevar – boolean
◦ siruri de caractere - string
• tipuri de date compuse - valoarea unei variabile ce are astfel de tip de date este formata din informatii multiple,
fiecare putand fi de alt tip de date daca este nevoie
◦ array – succesiune de perechi cheievaloare, unde cheia poate fi integer sau string iar valoarea poate avea
orice tip de date
◦ object – entitate care inglobeaza atat o colectie de date de diverse tipuri cat si functiile necesare prelucrarii
lor
• tipuri de date speciale
◦ resource – tip de date pentru variabile ce memoreaza informatii externe PHP, obtinute prin functii speciale
(ex: rezultatul interogarii unei baze de date, referinta catre un fisier deschis etc)
◦ NULL – folosit pentru a indica faptul ca o variabila nu are valoare (fie din cauza ca nu a fost definita, fie in
urma stergerii explicite)

Tipul de date pe care o variabila PHP il are la un moment dat poate fi determinat de una din urmatoarele operatii:
• cea mai recenta valoare atribuita variabilei. De exemplu, o variabila poate fi creata asignandu-i-se un numar
intreg, pentru ca mai apoi sa capete valoarea true (de tip boolean = valoare de adevar).
• cea mai recenta conversie explicita aplicata variabilei. Tipul de date al unei variabile poate fi schimbat fara a-i
asigna o valoare de alt tip, folosind functia predefinita settype()

$a = true; # este creata variabila cu numele $a de tip boolean, cu valoarea true


$a = 4; # in locatia referita de $a este acum memorata valoarea 4, cu tip de date int
settype($a, 'string'); # se schimba explicit tipul de date al lui $a in sir de caractere
var_dump($a); # string(1) "4"

Pentru ca o valoare prezenta ca atare in sursa programului (asignata unei variabile, sau parte a unei expresii) sa fie
considerata de catre interpretor ca fiind de tip integer, boolean etc este necesar ca valoarea sa fie reprezentata
corespunzator. Spre exemplu, true si false sunt cele doua valori posibile pentru tipul de date boolean, iar numerele intregi
sunt considerate automat de tip integer. De aceea, la fiecare tip de date de mai jos vom mentiona si modalitatile corecte de
reprezentare a valorilor in codul sursa.

Vor fi prezentate in continuare tipurile de date scalare, urmand ca cele compuse si speciale sa fie detaliate in lectii
ulterioare, dedicate (tablouri, clase si obiecte, lucrul cu fisiere si stream-uri etc).

2.5.2. bool (sinonim: boolean)


2.5.2.1. Descriere si modalitati de specificare

Folosit pentru a memora valori de adevar (adevarat sau fals). Valorile posibile pentru acest tip de date sunt true sau false.
Cele doua valori sunt case-insensitive si NU trebuie incluse intre ghilimele sau apostroafe:

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
7
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
$a = true; # se creeaza variabila $a de tip boolean si i se atribuie valoarea true
$b = FALSE; # se creeaza variabila $b de tip boolean si i se atribuie valoarea false
$c = (5>4); # se creeaza variabila c de tip boolean si i se atribuie rezultatul
# evaluarii expresiei 5>4, adica true (vezi operatori de comparare)
$b = 8; $c = ($b > 7); # idem, dar in comparatie poate interveni o variabila

$nume=”dan”; # se creeaza variabila $nume de tip string, initializata cu sirul dan


$d = ($nume==”ion”);# se creeaza variabila de tip boolean $d si i se asigneaza false ce
# reprezinta rezultatul evaluarii expresiei ($nume==”ion”)
# Atentie! Daca includeti cele doua valori posibile (true si false) intre ghilimele sau apostroafe,
# ele vor fi interpretate ca string!
$a = "true"; # se creeaza variabila $a de tip string
var_dump($a); # string(4) “true”

2.5.2.2. Utilitatea tipului de date boolean

Un program (fie el scris in PHP sau in alt limbaj) presupune de obicei luarea de decizii bazate pe valori ale variabilelor,
rezultate in urma prelucrarilor efectuate de program. Pentru luarea deciziilor deseori se fac comparatii, rezultatul acestora
fiind un verdict de tip "adevarat" sau "fals" (vezi operatori de comparare).

Exemplu: un utilizator completeaza un formular web in care isi introduce, printre altele, varsta si apasa Submit. Scriptul
PHP care primeste datele introduse va verifica daca valoarea introdusa pentru varsta este mai mica decat varsta umana
maxima posibila (fie ea 120) si va obtine un rezultat de tip "adevarat" sau "fals"; in cazul "fals", se va executa o portiune
de cod ce determina afisarea unei erori catre utilizator, iar in cazul "adevarat" input-ul de la utilizator va fi acceptat si
prelucrat.

if($varsta > 120){


echo "Ati introdus o varsta invalida!";
}else{
# alte instructiuni, pentru prelucrarea datelor

}

Nota: Exemplul de mai sus foloseste operatorul de comparare > si instructiunea decizionala if, care vor fi detaliate intr-
o lectie viitoare.

2.5.3. int (sinonim: integer)

Folosit pentru memorare de numere intregi, cu semn. Desi in general este memorat pe 32 de biti, dimensiunea tipului de
date int depinde de platforma; numarul de octeti pe care este stocat se gaseste in constanta predefinita PHP_INT_SIZE,
iar valoarea sa maxima in PHP_INT_MAX.

Daca, in urma unei operatii, valoarea unei variabile de tip int depaseste valoarea maxima a acestui tip de date, ea trece
automat in float. De asemenea, daca impartirea a doi intregi nu este exacta, rezultatul va fi un float (nu mai exista
impartire intreaga, ca in alte limbaje).

Pentru a fi recunoscuta ca atare, valoarea unui integer poate fi specificata in codul sursa in mai multe feluri:

$x = 4; # numar intreg, zecimal, pozitiv


$y = -15758; # numar intreg, zecimal, negativ
$z = 0x5a; # specificare in hexazecimal - echivalent cu $z = 90; (prefixul specific este 0x)
$t = 067; # specificare in octal - echivalent cu $t = 55; (prefixul specific este 0)
$b = 0b1011; # specificare in binar - echivalent cu $b = 11; (prefixul specific este 0b)

Observatie: un numar in hexazecimal este recunoscut dupa prefixul 0x ce precede succesiunea de digiti, iar un numar
octal are ca simbol distinctiv cifra 0 din fata.

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
8
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
Ori de cate ori interpretorul va intalni in codul sursa un numar specificat intr-unul dintre aceste 4 feluri, il va considera
automat de tip int. De aceea tipul de date al unei variabile care primeste o astfel de valoare devine automat int:

$a = true; # tipul de date al lui $a este boolean, deoarece interpretorul


# recunoaste true ca fiind o valoare de tip boolean
$a = 15; # tipul de date al lui $a devine int, deoarece 15 este una dintre
# reprezentarile corecte pentru o valoare de tip int

2.5.4. float (sinonim: double)

Folosit pentru memorarea numerelor cu zecimale, cu semn. Numarul de biti folositi pentru stocarea sa in memorie este, ca
si in cazul int, dependent de platforma; in schimb plaja de valori posibila este net superioara celei de la int.

Modalitati de a specifica valoarea unui float:

$f1 = 5.14;
$f2 = 514E-2; # 514 x 10-2
$f3 = 0.0514e2; # 0.0514 x 102

Atentie! Nu toate numerele cu zecimale pot fi reprezentate cu acuratete folosind acest tip de date, iar impreciziile se
amplifica atunci cand numerele sunt implicate in mai multe operatii succesive. De aceea nu este recomandabila
verificarea directa a egalitatii a doua variabile de tip float:

echo (int)((0.1+0.7)*10); # rezultatul este 7, nu 8!!


printf("%.15f", (19.6*100)); # afisare cu 15 zecimale; rezulta 1960.000000000000227 !!

2.5.5. string
2.5.5.1. Descriere generala

Acest tip de date este folosit pentru a memora siruri de caractere. Multe informatii intalnite in programare consta din
succesiuni de caractere: denumirile produselor dintr-un magazin virtual, numele si adresele persoanelor aflate intr-o baza
de date etc.

De retinut insa ca, in PHP, o variabila de tip string poate contine o succesiune de date binare (nu neaparat caractere
printabile – litere, cifre etc) si ca multe dintre functiile PHP predefinite care lucreaza cu string sunt binary-safe 2.

2.5.5.2. Modalitati de definire

Pentru ca o valoare din codul sursa sa fie considerata de tip string, este necesara reprezentarea ei intr-una dintre
urmatoarele forme:
2.5.5.2.1. Includerea valorii intre ghilimele

Valoarea delimitata de ghilimele va fi considerata automat de tip string:

$s = "carpe diem"; # "carpe diem" este recunoscut ca string, in consecinta variabila


# $s va avea acum tipul de date string

Din cauza faptului ca ghilimelele sunt folosite ca delimitatori, aparitia lor ca atare in cadrul sirului de caractere ar putea
cauza o interpretare gresita:

2
functii binary-safe = functii de manipulare de stringuri care trateaza un string ca pe o simpla insiruire de octeti, fara a se astepta ca
stringul sa aiba un anumit format sau sa contina exclusiv caractere printabile (litere, cifre etc)
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
9
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
$s = "Constructia "heredoc" va fi discutata mai jos";
# aceste ghilimele vor fi interpretate ca delimitator de final
# al sirului Constructia, rezultand o eroare la executie

De aceea, pentru a reprezenta caracterul " in cadrul unui string, este necesara precedarea acestuia cu caracterul \, care are
rol de escape character (elimina semnificatia speciala a caracterului ce-i urmeaza). In acest fel, " nu mai este interpretat
ca delimitator de final al string-ului:

$s = "Constructia \"heredoc\" va fi discutata mai jos";

Exista si alte caractere cu semnificatii speciale in cadrul unui string, care trebuie la randul lor precedate de \ daca se
doreste includerea caracterului in cauza in string:
• \ - are dublu rol:
◦ de escape character (discutat mai sus)
◦ de indicator al unei secvente speciale – ex: \n este reprezentarea pentru newline, \t pt tab etc

Observatie: \n semnifica trecerea pe linia urmatoare atunci cand output-ul programului se afiseaza in linia de comanda.
Atunci cand scriptul PHP genereaza o pagina web, \n cauzeaza trecerea pe linia urmatoare doar in codul sursa HTML,
ceea ce in browser nu va avea nici un efect vizual. Pentru a trece pe linia urmatoare in HTML se foloseste tag-ul <br />.

• $ - indica inceputul unui nume de variabila:

$s = "Caracterul \\ are rol de \"escape character\" "; echo $s;


# afiseaza: Caracterul \ are rol de "escape character"

$s = "Linia 1\nLinia2"; echo $s;


/* daca output-ul este in linia de comanda, afiseaza:
Linia 1
Linia 2
*/

$a = 5;
$s = "Variabila \$a are valoarea $a"; echo $s;
# afiseaza Variabila $a are valoarea 5

In cadrul unui string reprezentat prin includerea intre ghilimele se efectueaza automat substituirea numelor de
variabile cu valoarea lor. Atunci cand interpretorul intalneste in cadrul unui astfel de string caracterul $, incearca sa
formeze un nume de variabila folosind $ si cat mai multe caractere ce-i urmeaza (oprindu-se la primul caracter invalid
pentru nume de variabile), si apoi inlocuieste acest nume cu valoarea variabilei in cauza:

$s = "curs"; $s1 = "Merg la un $s"; # Merg la un curs


$s2 = "Foaie de par$s"; # Foaie de parcurs

Daca imediat dupa numele variabilei urmeaza alte caractere valide, interpretorul va forma un nume mai lung decat am
dori, rezultatul fiind un nume de variabila care fie nu a fost definita, fie va fi o alta variabila decat a intentionat
programatorul. De aceea, in astfel de cazuri este necesara delimitarea clara a numelui de variabila, lucru care se realizeaza
folosind acolade:

# interpretorul incearca sa foloseasca cat mai multe caractere pt numele de variabila


$s = "curs";
$s1 = "Merg la mai multe $suri"; # Merg la mai multe – variabila $suri nu este
# definita, deci valoarea null care se va inlocui cu sirul vid ""
$s2 = "Merg la mai multe ${s}uri"; # Merg la mai multe cursuri – numele variabilei este
# delimitat explicit
$s3 = "S{$s}uri ale societatii"; # Scursuri ale societatii - un alt exemplu de delimitare explicita

In PHP valorile de tip string pot fi reprezentate pe mai multe linii:


Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
10
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479

$a = “Iata un sir
pe mai multe
linii
“;

De remarcat insa ca sirul va fi memorat in felul in care a fost scris, cu toate caracterele prezente in el (chiar daca nu sunt
vizibile!): in exemplul de mai sus, caracterele newline ce produc trecerea pe linia urmatoare, si caracterele spatiu/tab care
produc alineatele.
2.5.5.2.2. Includerea valorii intre apostroafe

Atunci cand un sir de caractere din codul sursa este delimitat cu apostroafe, el va fi considerat automat de tip string, insa
in interiorul sau nu se va mai face substitutia variabilelor si nu vor mai functiona secventele speciale \n, \t etc:

$s = 'Variabila $a are valoarea true'; # nu este nevoie de \$a, ca in cazul ghilimelelor

In aceste conditii, $ nu mai este caracter special si nu mai trebuie precedat de \. In schimb, delimitatorul de string
(apostroful) este cel care, in cazul aparitiei in string, trebuie marcat corespunzator:

# apostroful din mijloc ar fi fost interpretat ca fiind cel de inchidere de string daca
# nu era precedat de \
$s = 'Editura O\'Reilly';

2.5.5.2.3. Includerea valorii intr-o constructie de tip "heredoc"

Constructia heredoc este echivalenta cu solutia anterioara de reprezentare de string ce foloseste ghilimele, cu diferenta ca
in interiorul heredoc-ului caracterul “ nu mai este special si poate fi folosit fara a fi precedat de \ .

Constructia heredoc are ca delimitator de inceput simbolul <<< urmat de o eticheta aleasa de programator (ce respecta
regulile ce se aplica numelor de variabile, mai putin caracterul $) , iar delimitatorul de final este aceeasi eticheta, singura
pe linie (fara alineat, spatii sau comentarii!) si urmata optional de punct si virgula:

$s = <<<GATA # eticheta aleasa este GATA


Un text
pe mai multe linii
GATA;

In cadrul constructiei heredoc, ca si in cazul ghilimelelor, se inlocuiesc automat variabilele intalnite cu valorile lor. In
aceste conditii, $ este caracter special, insa ghilimelele nu mai trebuie precedate de \ daca se doreste folosirea lor in cadrul
stringului:

$s1 = "Bond";
$s2 = <<<DELIM
My name is "$s1".
"James $s1".
DELIM;
# My name is "Bond".
# "James Bond".

2.5.5.2.4. Numere memorate ca string

Exista si cazuri in care intr-un string este memorata o succesiune de cifre; cand atribuim o astfel de valoare unei variabile,
acest lucru nu determina schimbarea tipului de date al variabilei in cauza la int sau float! (vezi codul de mai jos).
Exemplu: numerele de mobil ale persoanelor este mai convenabil sa fie stocate ca string (desi sunt formate numai din
cifre) deoarece 1) daca il stocam ca numar, pierdem 0-ul de inceput, si 2) ca string avem posibilitatea de a accesa facil

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
11
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
caracterele componente, putand astfel determina usor operatorul de telefonie (in functie de cifra care urmeaza dupa 07) si
lua decizii in functie de el.

$s1 = 1234; # variabila $s1 este de tip integer


$s1 = "1234"; # $s1 este acum de tip string!

Dupa cum se va vedea insa, exista destui operatori PHP care stiu sa foloseasca corect valoarea numerica a unui astfel de
string care contine un numar valid, fara a fi nevoie de conversie explicita de tip de date.

2.6. CONSTANTE
2.6.1. Prezentare si tipuri
Constantele reprezinta zone de memorie referite prin intermediul unui nume al caror continut, odata initializat, nu se mai
schimba. Ele sunt utile, spre exemplu, atunci cand avem elemente de configurare a site-ului pe care vrem sa le folosim in
mai multe fisiere PHP (si deci ar trebui plasate in variabile) insa nu vrem sa le modificam din greseala.

Constantele pot fi:


• definite de programator
• predefinite
◦ constante “normale” (a caror valoare nu se schimba pe durata executiei unui fisier PHP)
◦ magic constants - sunt constante predefinite a caror valoare nu poate fi modificata de catre programator, insa
valoarea lor este permanent actualizata de catre interpretor. Spre exemplu, constanta __LINE__ care are ca
valoare numarul liniei din fisier pe care a ajuns executia

2.6.2. Constante definite de programator


Constantele se pot defini de catre programator in doua moduri:
• cel traditional, ce foloseste constructia define()
• cel nou, introdus in PHP 5.3, ce foloseste cuvantul cheie const

Constructia define primeste doi parametri, in aceasta ordine:


• numele constantei, sub forma de string
• valoarea constantei, specificata conform cu tipul de date dorit (vezi reprezentari pentru tipuri de date)

define('CURS', 'PHP'); # numele constantei este CURS, specificat folosind apostroafe


define("NUME", "Mihai"); # numele constantei este NUME, specificat folosind ghilimele
define("VARSTA", 20); # valoarea este de tip integer, nu-i mai punem ghilimele ca mai sus

Daca optam pentru const, acesta este urmat de numele constantei, de operatorul de atribuire si de valoarea dorita:

const CURS = 'PHP';


const NUME = “Mihai”;
const VARSTA = 20;

Nota: se obisnuieste ca numele de constante sa fie formate exclusiv din majuscule, pentru lizibilitate, insa acest lucru nu
este obligatoriu.

Caracteristicile constantelor sunt urmatoarele:


• numele lor este case-sensitive si de obicei este format din majuscule; compozitia lui respecta regulile pentru
numele de variabile, cu exceptia caracterului $
• nici la definirea constantei, nici la utilizarea valorii ei nu se foloseste caracterul $ in fata numelui!

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
12
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
echo "Ma cheama " . NUME; # fara $ in fata numelui constantei!
echo ", am " . VARSTA . "ani"; # Folosirea constantei in expresii care
echo ", si sunt la cursul de " . CURS; # utilizeaza operatorul de concatenare .
echo "Am facut " . (VARSTA+10). " de ani"; # Constanta ca operand in adunare

• tipul de date si valoarea unei constante au diverse restrictii in functie de modul de definire si de versiunea de PHP
folosita:
◦ tipul de date poate fi doar scalar (integer, float, boolean, string) in PHP 5; incepand cu PHP 7 se accepta si
array-uri
◦ in privinta valorii:
▪ pentru constantele definite cu define, valoarea poate fi scrisa ca atare in codul sursa, sau poate rezulta
dintr-o expresie oarecare (cu conditia ca valoarea expresiei sa aiba un tip de date acceptat)
▪ pentru constantele definite cu const, valoarea poate fi scrisa ca atare in codul sursa sau poate rezulta
dintr-o expresie cu rezultat scalar. Asadar, in cazul lui const nu putem defini constante care au ca valoare
un array decat scriind array-ul cu mana, nu calculcandu-l cu o expresie:

# functia predefinita explode() “taie” sirul primit ca argument secund in dreptul minusului,
# separandu-l in doua campuri si producand un array ce contine astfel doua elemente: mere si pere
define('FRUCTE1', explode("-","mere-pere"));
var_dump(FRUCTE1); /* afiseaza:
array(2) {
[0]=>
string(4) "mere"
[1]=>
string(4) "pere"
}
*/
const FRUCTE2 = explode("-","mere-pere");
# PHP Fatal error: Constant expression contains invalid operations in /tmp/sterge.php on line 5

• au vizibilitate automata in intreg scriptul PHP ("global scope"). Se va vedea intr-o lectie viitoare ca variabilele
obisnuite definite in afara functiilor nu sunt vizibile inauntru; constantele in schimb nu au aceasta restrictie
• nu pot fi redefinite (nu se poate defini o constanta daca exista deja una cu acelasi nume), modificate sau sterse:

define('CURS', 'PHP');
define('CURS', 'Python'); # eroare, constantele nu pot fi redefinite
CURS = "Java"; # eroare, constantele nu pot fi modificate
unset(CURS); # eroare, nu putem sterge o constanta

• lista de constante definite se poate obtine cu functia predefinita get_defined_constants()


• se poate verifica daca o constanta a fost sau nu definita folosind functia predefinita defined()

Atentie! Atunci cand programatorul foloseste o constanta nedefinita, interpretorul emite un warning de tip notice si
considera ca s-a dorit utilizarea string-ului ce constituie numele constantei:

var_dump(defined('MAX')); # afiseaza bool(false) - dovada ca constanta nu este inca definita


echo MAX; /* afiseaza:
PHP Notice: Use of undefined constant MAX - assumed 'MAX' in /tmp/sterge.php on line 4
MAX
*/

2.6.3. Constante predefinite


2.6.3.1. Constante predefinite standard si utilitatea lor

Constantele din aceasta categorie contin diverse informatii utile pentru programator, pe care interpretorul PHP ne face
serviciul de a ni le oferi la indemana. Amintim aici unele constante prezentate mai sus (ex: PHP_INT_SIZE,

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
13
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
PHP_INT_MAX), alaturi de care se gasesc o multitudine de altele; pentru lista completa consultati
http://php.net/manual/en/reserved.constants.php .

Utilizarea lor este identica cu cea a constantelor definite de programator:

echo “Pe aceasta platforma numerele intregi sunt stocate pe “ . PHP_INT_SIZE . ” octeti”;

2.6.3.2. Magic constants

Aceste constante isi justifica numele doar din perspectiva faptului ca nu pot fi modificate/redefinite de catre programator;
valoarea lor este insa actualizata permanent de catre interpretor. Iata cateva exemple:
• __LINE__ - memoreaza numarul liniei din fisierul curent pe care se afla executia programului
• __FILE__ - stocheaza calea completa catre fisierul curent aflat in executie (cel din care se acceseaza constanta)
• __DIR__ - are ca valoare directorul fisierului aflat in executie (echivalent to dirname(__FILE__)). Valoarea nu
contine sufixul /
• __FUNCTION__ - numele functiei curente, daca instructiunea ce foloseste constanta se afla in interiorul unei
functii

Atentie! Toate numele de mai sus au ca prefix si ca sufix dublu underscore (_ _).

Putem folosi aceste constante, spre exemplu, pentru generarea unor mesaje de eroare mai bogate in informatie; in acest
fel, cand ne uitam in loguri putem vedea nu doar textul erorii, ci si locul in care ea s-a produs (fisier, linie etc)

2.7. OPERATORI
2.7.1. Descriere generala

Operatorii sunt elemente de limbaj care combina una sau mai multe valori existente (numite operanzi) si produc o valoare
finala (rezultatul operatiei). Vor fi prezentate in continuare principalele categorii de operatori din limbajul PHP.

2.7.2. Operatori aritmetici

Realizeaza operatiile + adunare numerica, daca operanzii sunt de tip scalar. Daca operanzii sunt de tip array,
matematice de baza. Tipul de realizeaza compunere!
- Scadere
date al rezultatului poate diferi
* Inmultire
de al operanzilor (vezi cazul
/ impartire. Daca primul operand nu se imparte exact la cel de-al doilea, rezultatul este float
impartirii). % modulo (restul impartirii primului operand la al doilea)

Atentie! Operatorii aritmetici isi convertesc operanzii la valori numerice daca acestia sunt scalari! (vezi tabelul de
conversie de la finalul materialului)

$a = 4; $b = true; $c = “text”; $d = “2 ani”; # variabile de 3 tipuri de date diferite


echo $a + $b; # 5 (valoarea lui $b e convertita la int, rezultand 1)
echo $a + $c; # 4 (valoarea lui $c e convertita la int, rezultand 0)
echo $a + $d; # 6 (valoarea lui $d e convertita la int, rezultand 2)
echo $b + $c; # 1 ($b convertit la int da 1, iar $c convertit la int da 0)

2.7.3. Operatori de atribuire

Operatorul de atribuire = poate fi folosit de sine statator sau compus cu unul aritmetic sau de alta natura. Rezultatul
acestui operator este chiar valoarea atribuita:

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
14
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479

$a = (5+ ($b = 4)); echo $a." ".$b # 9 4, deoarece expresia ($b=4) produce valoarea 4
$b += 7; echo $b; # 11 – echivalent cu $b = $b + 7
$a *= $b; echo $a; # 99 – echivalent cu $a = $a * $b

2.7.4. Operatorul de cast (conversie explicita)

Valoarea unei variabile sau expresii poate fi convertita la un alt tip de date in doua situatii:
• conversia explicita a valorii unei variabile sau expresii, de catre programator, folosind operatorul de cast, de
forma (tip_date_dorit)(expresie) care evalueaza expresia si ii converteste valoarea la tipul de date indicat:

$a = "3 turme de miei cu 3 ciobanei"; # $a are acum tipul de date string


var_dump((int)$a); # int (3) , rezultat din conversia stringului la int
# nu este modificat tipul de date al lui $a; conversia se
# aplica unei copii a valorii lui $a

• conversie implicita (efectuata automat), atunci cand contextul in care se afla expresia sau variabila cere un anumit
tip de date. Multi operatori, functii, structuri de control etc. convertesc automat expresiile primite ca
operanzi/argumente. De exemplu, echo converteste argumentele sale la string:

$a = true; # crearea variabilei $a cu tip de date boolean, initializata cu true


echo $a; # 1, rezultat din conversia booleanului la string (vezi tabelul de conversie)
$a = false; # $a ramane boolean dar isi schimba valoarea in false
echo $a; # nu afiseaza nimic, pt ca conversia lui false la string produce sirul vid ""
# $a a ramas boolean!

IMPORTANT! Tabelul de conversie atasat acestui material cuprinde regulile de conversie intre toate tipurile de
date PHP. Chiar daca pe moment nu aveti cunostintele necesare pentru a intelege intregul tabel, el reprezinta o
resursa utila la care veti reveni pe masura ce invatati operatori, structuri de control, functii, tablouri, clase si
obiecte etc.

2.7.5. Operatori de incrementare si decrementare

Sunt folositi pentru incrementarea sau decrementarea variabilelor (=cresterea sau descresterea valorii cu o unitate). Pot fi
folositi in doua variante:
• varianta prefix – variabila se incrementeaza; rezultatul operatorului este valoarea incrementata
• varianta sufix – variabila se incrementeaza; rezultatul operatorului este valoarea NEINCREMENTATA

$a = 5;
echo $a++; # afiseaza 5, dar $a devine 6
echo ++$a; # afiseaza 7, care este valoarea deja incrementata a lui $a

2.7.6. Operatori de comparare

Operatorii de comparare produc un rezultat de tip boolean ce indica rezultatul comparatiei. Ei sunt: >, <, >= (mai mare
sau egal), <= (mai mic sau egal), == (egal, non-strict), === (egal in sens strict), != (diferit, non-strict), !== (diferit, in sens
strict).

$a = (5>4); # se evalueaza intai operandul drept al asignarii; $a devine true


$b = ($a == false); # $a era true, asadar rezultatul lui ==, memorat in $b, este false

Operatorii de comparare se impart in doua mari categorii:


• cei non-stricti: operatorii <, >, <=, >=, == si !=, care fac automat conversii ale operanzilor (vezi tabelul de
conversie) si compara valorile rezultate. Regulile dupa care se fac conversiile sunt:
◦ daca ambii operanzi sunt numere, ei sunt comparati numeric
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
15
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
◦ daca ambii operanzi sunt string:
▪ daca ambele string-uri sunt reprezentari de numere valide, se convertesc operanzii la numar si se face
comparare numerica a celor doua valori
▪ in caz contrar, compararea este cea clasica, care compara codurile caracterelor pozitie cu pozitie
◦ daca un operand este boolean, celalalt este convertit la boolean
• cei stricti: operatorii === si !==. Cei doi operanzi sunt egali daca tipurile lor de date sunt identice SI valorile sunt
egale, fara nici un fel de conversie

$a = "text";
var_dump($a == 0); # bool (true)!! un string nevid si non-numeric convertit la int da 0
var_dump($a === 0); # bool (false) - tipurile de date ale operanzilor sunt diferite
var_dump(“0” == 0); # bool (true) - string-ul este convertit la numar
var_dump(“0” === 0);# bool (false) - tipurile de date ale operanzilor nu sunt identice

In tabelul de conversie atasat materialului sunt sintetizate modalitatile in care se face conversia intre diversele tipuri de
date prezente in PHP.

2.7.7. Operatori logici

Sunt folositi pentru crearea unor expresii complexe de tip boolean prin combinarea de valori elementare. Sunt utilizati cu
precadere pentru specificarea conditiilor instructiunilor decizionale (in special if), prin agregarea rezultatelor mai multor
operatori de comparare (exemplu: daca username-ul introdus de un utilizator web este prezent in baza de date cu
utilizatori SI parola introdusa este cea corecta pentru username-ul in cauza, SAU daca utilizatorul era deja autentificat, i
se afiseaza una dintre paginile protejate ale site-ului; in caz contrar se va afisa pagina de login).

Operatorii logici sunt urmatorii:

• && – SI logic. Rezultatul sau este true numai daca ambii operanzi se evalueaza ca true. Daca macar unul dintre
operanzi este false, rezultatul va fi false
• | | – SAU logic. Rezultatul sau este true daca oricare dintre operanzi se evalueaza true. Rezultatul este false numai
atunci cand ambii operanzi sunt false
• ! – negare (inversarea valorii de adevar) Operand 1 Operand 2 &&,and ||, or xor
• and – SI logic, dar cu precedenta mai mica decat && si = false false false false false
• or – SAU logic, dar cu precedenta mai mica decat || si = false true false true true
• xor – SAU exclusiv, cu precedenta mai mica decat &&, || si =. true false false true true
Daca operanzii au valori egale rezultatul este false, cand au true true true true false
valori diferite este true.

Atentie! Operanzii sunt convertiti automat la boolean! (vezi tabelul de conversie)

Exemple:

$a = true; $b = false;
$c = $a && !$b; # $a: true, !$b: true ==> true && true: true
$d = ($a || $b) && ($a xor $b); # $a || $b este true, $a xor $b este true, true && true da true

Pot fi folosite ca operanzi orice expresii a caror valoare este de tip boolean:

$a = 5; $b = 7;
$c = ($a > $b) && ($a == ($b-2) );
# $a > $b e false, $a == ($b-2) e true; false && true da false

Operatorii &&/and si ||/or functioneaza cu "scurtcircuitare" – al doilea operand nu se mai evalueaza daca primul este
suficient pentru a decide valoarea expresiei. De exemplu, in expresia false && f($a), functia f($a) nu se mai apeleaza
deoarece, primul operand fiind false, este clar de la bun inceput ca rezultatul expresiei va fi false (vezi tabelul).
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
16
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479

$a = (true || print 's-a executat print; '); # nu afiseaza nimic; print nu se executa
var_dump($a); # bool (true); print returneaza 1 care convertit la boolean da true
$a = (false || print 's-a executat print; '); # afiseaza s-a executat print;
var_dump($a); # bool(true) (al doilea operand e cel care decide rezultatul)

Precedenta diferita a diversilor operatori duce la evaluarea foarte diferita a unei expresii in cazul in care nu sunt folosite
paranteze pentru prioritizare:

$a = false || print 'a fost apelat print';


# || are precedenta mai mare decat =, asadar se evalueaza intai || si rezultatul se
# atribuie lui $a. Este ca si cum am scrie $a = (false || print 'a fost apelat print');
$a = false or print 'a fost apelat print';
# or are precedenta mai mica decat =; se evalueaza =, iar rezultatul sau este considerat ca fiind
# primul operand al lui or. Este ca si cum am scrie ($a = false) or (print 'a fost apelat print')

Iata un exemplu real care se foloseste de precedenta diferita a operatorilor - conectarea la o baza de date (detaliile exacte
ale lucrului cu baze de date vor fi incluse intr-o lectie viitoare):

$conn = mysql_connect_db($nume_db,$user,$pass) or die ("Eroare la conectarea cu MySQL!");

Operandul stang al lui or este rezultatul operatorului de atribuire. In functie de valoarea acestuia, expresia poate fi
evaluata in doua moduri:
• in cazul unei probleme de conectare, rezultatul atribuirii va fi null, care convertit la boolean da false. Cand primul
operand este false, operatorul or va evalua si cel de-al doilea operand, asadar se va executa instructiunea die()
care are ca efect incheierea executiei programului cu afisarea unui mesaj de eroare
• daca conectarea se realizeaza cu succes, rezultatul atribuirii va fi de tip resource, care convertit la boolean da true.
Primul operand fiind true, or nu il va mai evalua pe cel de-al doilea si executia va continua cu instructiunea de pe
linia urmatoare

2.7.8. Operatori la nivel de bit

Sunt folositi pentru operatii aplicate reprezentarii in binar a numerelor:

• & - SI la nivel de bit Bit 1 Bit 2 & | ^


• | - SAU la nivel de bit 0 0 0 0 0
• ^ - SAU exclusiv lsa nivel de bit 0 1 0 1 1
• ! – negare pe biti (comutarea valorii bitilor) 1 0 0 1 1
• <<, >> - deplasare pe biti la stanga sau la dreapta 1 1 1 1 0

2.7.9. Operatori pentru string-uri


2.7.9.1. Concatenarea string-urilor

Concatenarea (alipirea) a doua string-uri se realizeaza in PHP cu ajutorul operatorului . (punct)

$a = “varza”; $b = “viezure”; $c = “manz”;


echo “Dacii aveau “ . $a . ‘,’ . $b . ‘,’ . ‘ si ‘ . $c;
# afiseaza: Dacii aveau varza, viezure si manz
# operatii: se concateneaza “Dacii aveau “ cu valoarea lui $a, apoi cu stringul ce contine virgula
# apoi cu $b etc. Rezultatul final al concatenarii este pasat ca argument lui echo

Atentie! String-urile NU mai pot fi concatenate cu +, ca in alte limbaje! In PHP, operatorul + face conversia la numar a
celor doi operanzi.

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
17
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
Operatorul de concatenare isi converteste automat operanzii la string, chiar daca acestia sunt de alte tipuri de date:

$scor_gazde = 3; $scor_oaspeti = 2;
echo "Echipa gazda a castigat cu scorul de ".$scor_gazde." la ".$scor_oaspeti;
# afiseaza: Echipa gazda a castigat cu scorul de 3 la 2

2.7.9.2. Accesarea individuala a caracterelor componente ale stringului

Caracterele componente ale unui string pot fi accesate folosind constructia $sir[index], unde indexul reprezinta pozitia
dorita numerotata de la zero si este de tip int:

$s = "InfoAcademy"; # creaza variabila $s de tip string si ii asigneaza sirul InfoAcademy


echo $s[4]; # afiseaza A (caracterul aflat pe pozitia 4 daca numaram de la 0,
# sau pozitia 5 daca numaram de la 1)
# folosindu-ne de acest operator putem extrage (intr-un mod cam chinuit, e drept) subsiruri:
$info = $s[0].$s[1].$s[2].$s[3];

2.7.10. Operatorul ternar

Acest operator este folosit pentru a alege una din doua valori specificate de programator, in functie de o conditie ce se
evalueaza ca boolean. Forma sa generala este urmatoarea:

(expresie_etalon) ? expresie1 : expresie2

Daca expresie_etalon se evalueaza true, rezultatul operatorului va fi valoarea expresiei 1; in caz contrar rezultatul este
valoarea expresiei 2. Valoarea expresiei etalon este convertita automat la boolean daca este de alt tip de date.

Expresiile ce joaca rol de operand 2 si 3 trebuie sa aiba o valoare – nu este permisa folosirea de instructiuni care nu au ca
rezultat valori:

$a = (true)? echo “true” : echo “false” ; # eroare, deoarece echo nu produce valoare
$a = (true)? print “true” : 13 ; # functioneaza; $a ia valoarea 1 (adica ceea ce returneaza print)

Efectul sau ar putea fi obtinut si prin folosirea instructiunii conditionale if, insa cu operatorul ternar scrierea este mai
condensata:

$varsta = 50;
$varsta_prelucrata = (($varsta<40)? "$varsta de ani" : "o frumoasa varsta");
echo "Astazi sotia mea a implinit ".$varsta_prelucrata;

Afirmatia nu este valabila si in sens opus! Nu tot ce poate fi scris cu if are echivalent in operatorul ternar. Desi ambele
sunt folosite pentru a lua decizii, intre ele exista o deosebire esentiala: if alege intre doua seturi de instructiuni si executa
una dintre ele, pe cand operatorul ternar alege intre doua expresii si evalueaza una dintre ele, intorcand valoarea acesteia.

Atentie! Pentru siguranta, este bine in general sa includem atat expresia etalon, cat si intregul operator ternar intre
paranteze rotunde; in caz contrar, precedenta diferita a operatorilor poate provoca surprize. Fie urmatorul exemplu:

$b = 'Culoarea '.(5>4) ? "rosie" : "verde";


$c = 'Culoarea '.((5>4) ? "rosie" : "verde");

echo "b: $b".PHP_EOL; # rosie


echo "c: $c".PHP_EOL; # Culoarea rosie

Sa analizam codul:
• pe linia care ii atribuie valoare lui $b, toata sectiunea dintre operatorul de atribuire si semnul de intrebare al
ternarului ( 'Culoarea '.(5>4) ) va fi considerata expresia etalon a operatorului ternar! Este ca si cum am fi scris
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
18
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 479
$b = ('Culoarea '.(5>4)) ? "rosie" : "verde". Asadar $b va capata valoarea true, iar operatorul ternar intoarce
valoarea “rosie” care este memorata in $b
• pe linia urmatoare, deoarece s-au folosit paranteze pentru prioritizare, expresia etalon este 5>4 si are valoarea
true; operatorul ternar va produce valoarea “rosie” care este concatenata cu sirul 'Culoarea', rezultatul final fiind
memorat in $c

2.7.11. Null coalesce operator

Sintaxa sa generala este:

expresie1 ?? expresie2

Operatorul primeste doi operanzi, separati prin ??, iar rezultatul produs este una dintre cele doua valori dupa cum
urmeaza:
• daca primul operand are o valoare diferita de null, operatorul va produce aceasta valoare
• daca primul operand este o variabila nedefinita sau are valoarea null, operatorul va produce cea de-a doua valoare
Practic operatorul intoarce prima valoare dintre cele doua care este non-null:

var_dump(isset($nrcopii)); # bool (false) - variabila $nrcopii este nedefinita


# sau are valoarea explicita null
$n = $nrcopii??0; # $n capata valoarea 0
$nrcopii = 4;
$n = $nrcopii??0; # $n capata valoarea 4

Observam ca acest operator implementeaza de fapt un caz particular al operatorului ternar, caci poate fi rescris astfel:

isset(expresie1)?expresie1:expresie2

Operatorul poate fi folosit pentru a stabili rapid o valoare default pentru o variabila in cazul in care ea nu exista. Dupa
cum se va vedea in lectia dedicata procesarii input-ului de la client, suntem deseori pusi in situatia de a testa existenta
unei variabile client si de a ne asigura ca ea este initializata inaintea folosirii; operatorul prezentat este o scurtatura utila in
acest scop.

2.8. BIBLIOGRAFIE

• PHP Manual
◦ sintaxa de baza: http://php.net/manual/en/language.basic-syntax.php
◦ variabile: http://php.net/manual/en/language.variables.php
◦ tipuri de date: http://php.net/manual/en/language.types.php
◦ constante: http://php.net/manual/en/language.constants.php
◦ operatori: http://php.net/manual/en/language.operators.php

Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
19
2.9. ANEXA 1 – tabel de conversie intre tipurile de date PHP

boolean int float string array object null resource


(float)expr
(int)expr (string)expr
mod de (bool)expr (double)expr unset($
(integer)expr strval($var) (array)expr (object)expr -
conversie (boolean)expr (real)expr var)
intval(expr) "$var"
floatval($var)
False0 False0 False""
boolean -
True1 True1 True"1"
- -

0false Valoarea numerica


int Altcevatrue
-
respectiva
- -
Numarul ca string
0false Un intreg obtinut prin Instanta de stdClass
float Altcevatrue rotunjire catre 0 (!)
- Array cu un element avand cu un camp numit - -
valoarea respectiva $scalar ce contine
Daca stringul incepe cu o portiune numerica zecimala valoarea
valida (un eventual semn+cifre+un eventual .
"" si "0"false +cifre+eventual [eE] si exponent) conversia da numar.
string Daca stringul contine e,E sau . rezultatul va fi float, in caz - - -
Altcevatrue contrar integer.

Daca stringul nu incepe cu nr valid, conversia da 0


Instanta de stdClass
Array cu 0 elemente
in care campurile au
false
array "Array" - ca nume cheile din - -
array si ca valori
Altcevatrue
valorile din array
PHP4: obiect fara Nedefinit
campurifalse (pe moment se comporta Un array ale carui elemente sunt
ca si cum Ca si cum conversia s-ar PHP4: "Object" atributele obiectului. Cheile array-
PHP 5: Obiect expresia/variabila ar fi face intai la integer si apoi ului sunt numele atributelor, cu
object SimpleXML creat pe intai convertita la boolean, la float PHP5: valoarea intoarsa de mici particularitati: atributele - - -
baza unui tag gol  false insa acest comportament se metoda __toString() a private vor primi ca prefix numele
poate schimba in viitoare obiectului clasei, iar cele protected vor fi
Orice alt obiecttrue versiuni) prefixate cu *

Instanta de stdClass
null false "" Array gol (array() )
fara campuri
- -
idem int (obiect cu
resource true "Resource id #N" Array cu un element
un camp $scalar)
- -

S-ar putea să vă placă și