Documente Academic
Documente Profesional
Documente Cultură
www.infoacademy.net
Ionut Cristian Morar
rev. 479
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
Toate aceste elemente sunt puse laolalta in instructiuni - comenzi date calculatorului in cadrul unui program.
• 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):
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)
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).
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!
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.
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:
$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.
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.
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().
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.
• 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:
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:
• 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:
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")
• 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).
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
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()
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).
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
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.
Nota: Exemplul de mai sus foloseste operatorul de comparare > si instructiunea decizionala if, care vor fi detaliate intr-
o lectie viitoare.
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:
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:
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.
$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:
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.
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
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:
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 />.
$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:
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:
$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:
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';
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:
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".
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.
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.
Daca optam pentru const, acesta este urmat de numele constantei, de operatorul de atribuire si de valoarea dorita:
Nota: se obisnuieste ca numele de constante sa fie formate exclusiv din majuscule, pentru lizibilitate, insa acest lucru nu
este obligatoriu.
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
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:
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 .
echo “Pe aceasta platforma numerele intregi sunt stocate pe “ . PHP_INT_SIZE . ” octeti”;
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.
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)
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
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:
• 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:
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.
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
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 = "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.
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).
• && – 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.
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:
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):
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
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
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:
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:
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:
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
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:
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
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)
- -