Sunteți pe pagina 1din 32

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

CAPITOLUL I Limbajul PHP (PHP Hypertext Preprocessor)

1. Introducere. Funcţionarea motorului PHP

Definiţie recursivă:

PHP (PHP Hypertext Preprocessor) = Preprocesorul de Hypertext PHP (Preprocesorul de Hypertext PHP (Preprocesorul de Hypertext PHP(

)))

PHP (acronim recursiv pentru "PHP: Hypertext Preprocessor") este un limbaj de scripting (realizat şi distribuit în sistem Open Source) ce poate fi încapsulat în HTML şi care se utilizează pe scară largă în aplicaţiile bazate pe tehnologiile Web, inclusiv în aplicaţii de comerţ electronic.

Exemplul 1.1.

Trei scripturi elementare introductive ce conţin respectiv numai cod PHP, cod PHP + cod HTML şi cod PHP + cod JavaScript

<html> <head> <title>Exemplul 1 </title> </head> <body> <?php echo "Salut, eu sunt un script PHP elementar!"; ?> </body> </html>

<html> <head> <title>Exemplul 2</title> </head> <body> <?php // scriptul se salveaza intr-un fisier "pagina_mea.php" echo 'Acesta este un script RECURSIV ce contine si <b>HTML</b> <br> <a href="pagina_mea.php">Legatura AUTOREFERENTIALA catre pagina mea</a>'; ?> </body> </html>

<html> <head> <title>Exemplul 3</title> </head> <body> <?php echo '<html> <head><title>PHP cu JavaScript</title> <script language="JavaScript"> function alertare () {

alert(”Acesta este un test PHP ce contine JavaScript”)

// alert(\'Acesta

JavaScript\') //ACELASI REZULTAT CA PT.""

}

</script> </head> <body onLoad="alertare()">

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

?>

</body>

</html>

<p>Un script PHP ce contine JavaScript</p> </body> </html>';

Se observă din acest exemplu cum diferă faţă de un script scris în alte limbaje cum ar fi Perl (Practical Extraction and Report Language) sau C -- în loc de a scrie un program cu o mulţime de comenzi pentru a produce un HTML, se scrie un script HTML ce include cod pentru a realiza un obiectiv (în acest caz, a afişa un text). Codul PHP este delimitat de coduri de start şi de sfârşit (<?php…?>)ce îţi permit să intri şi să ieşi din "modul PHP". Diferenţa dintre PHP şi alte limbaje cum ar fi JavaScript este aceea că PHP este executat pe server pe când JavaScript este executat pe calculatorul clientului (de către programul de navigare pe Internet). Dacă ar fi să ai un script similar cu cel de mai sus pe serverul tău, clientul ar primi doar rezultatele scriptului ce este rulat, fără a vedea în nici un fel codul din spatele acestuia. Se poate chiar configura serverul de web ca acesta să proceseze toate fişierele HTML cu PHP şi astfel încât nici un utilizator nu poate vedea ce există în fişierele serverului. PHP este în principal axat pe partea de scripting ce rulează pe server, deci se poate realiza şi un program CGI(Common Gateway Interface), cum ar fi colectarea de date de la formulare, generarea de conţinut dinamic sau trimitere şi primire de cookie-uri.

Figura 1.1. Funcţionarea motorului PHP
Figura 1.1.
Funcţionarea motorului PHP

Există trei domenii principale unde sunt folosite scripturile PHP.

1. Scripturi ce rulează pe server. Acesta este cel mai tradiţional şi cel mai important pentru PHP. Sunt necesare trei lucruri pentru a face să meargă:

1. 1. Interpretorul PHP (CGI sau modul server),

1. 2. Un server de web şi

1. 3. Un navigator de web.

Este nevoie ca serverul de web să fie pornit, cu o conexiune PHP instalată. Rezultatul programelor PHP poate fi vizualizat cu un navigator prin intermediul serverului de web.

2. Scripting la linia de comandă. Se poate face ca PHP să ruleze fără a fi nevoie de server şi de browser, ci doar de interpretorul PHP. Această metodă este ideală pentru scripturile ce se vor a fi executate regulat folosind cron (task scheduler în Windows), sau sarcini simple de procesare a textelor.

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

3. Scrierea de aplicaţii ce rulează pe partea clientului în mod grafic (GUI). Se pot folosi facilităţile avansate ale PHP-ului în aplicaţiile ce rulează de partea clientului prin exploatarea extensiei PHP-GTK pentru a scrie astfel de programe care pot rula, de asemenea pe platforme diferite folosind această metoda.

PHP poate fi folosit pe aproape toate marile sisteme de operare, incluzând Linux, multe variante de Unix (incluzând HP-UX, Solaris şi OpenBSD), Microsoft Windows, Mac OS X, RISC OS, probabil şi altele. PHP are, de asemenea, suport pentru majoritatea serverelor de web din prezent. Acestea includ serverele Apache, Microsoft Internet Information Server, Personal Web Server, Netscape şi iPlanet, serverul Oreillz Website Pro, Caudium, Xitami, OmniHTTPd, şi multe atele. Pentru majoritatea serverelor, PHP are un modul, iar pentru celelalte suportă standardul CGI, PHP putând să lucreze ca un procesor CGI. Deci, cu PHP, se poate alege liber un sistem de operare şi un server de web. Există, de asemenea, posibilitatea de a alege programarea procedurală sau programarea orientată obiect, sau chiar un mixaj între aceste stiluri de programare. Una dintre cele mai puternice şi importante facilităţi în PHP o reprezintă suportul său pentru o gamă largă de baze de date. Scrierea unei pagini de web ce interacţionează cu o bază de date este simplă şi poate fi realizată pentru următoarele baze de date:

Adabas D

Ingres

Oracle (OCI7 şi OCI8)

dBase

InterBase

Ovrimos

Empress

FrontBase

PostgreSQL

FilePro (doar citire)

mSQL

Solid

Hyperwave

Direct MS-SQL

Sybase

IBM DB2

MySQL

Velocis

Informix

ODBC

Unix dbm

În plus, PHP suportă ODBC, standardul Open DataBase Connectivity, care permite conectarea la orice altă bază de date care este realizată după o tehnologie ce suporta acest standard mondial. Funcţiile PHP pentru acces la bazele de date nu sunt standardizate. Aceasta conduce la necesitatea existenţei unei biblioteci de clase pentru baze de date care să ascundă diferenţele între API(Aplication Program Interface) ale diverselor servere de baze de date (i.e. să încapsuleze particularităţile implementărilor acestora) astfel încât interschimbul de informaţii privitoare la bazele de date şi conţinutul lor să se realizeze facil. O implementare care satisface aceste cerinţe este ADOdb (ActiveX Data Objects for Data Base). În momentul de faţă biblioteca ADOdb suportă Access, MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, Informix, PostgreSQL, FrontBase, Interbase (variantele Borland şi Firebird), FoxPro, ADO, DB2, SAP DB şi ODBC. PHP se poate folosi cu succes în domeniul comerţului electronic, existând deja un mare arsenal de funcţii pentru plaţi on-line, funcţii de plată Cybercash, CyberMUT, VeriSign Payflow Pro şi CCVS.

Exemplul 1.2.

Afişarea unei variabile care este element al unui tablou (Variabila superglobală _SERVER)

<?php //Afisarea unei variabile care este element al unui tablou //(Variabila superglobala) _SERVER) echo $_SERVER['HTTP_USER_AGENT']; ?>

Răspunsul va fi:

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

Exemplul 1.3.

Utilizarea structurii de control condiţionale IF şi a funcţiilor

<?php //Utilizarea structurii de control conditionale IF si a functiilor if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {echo 'Utilizati MS-Internet Explorer pentru navigare.<br />';} else {echo 'Multumiri pentru utilizarea MS-Internet Explorer!.<br />';}

?>

Răspunsul va fi:

Utilizati MS-Internet Explorer pentru navigare.

Exemplul 1.4.

Mixaj între HTML şi PHP

<?php //Mixaj între HTML si PHP if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) { ?> <h3>Functia strpos() a intors valoarea ADEVARAT</h3> <p>Utilizati MS-Internet Explorer pentru navigare </p> <?php } else { ?> <h3> Functia strpos() a intors valoarea FALSE</h3> <p> NU utilizati MS-Internet Explorer pentru navigare </p> <?php

}

?>

Răspunsul va fi:

Functia strpos() a intors valoarea ADEVARAT

Utilizati MS-Internet Explorer pentru navigare

2. Elemente de sintaxă ale limbajului PHP

Marcaje de delimitare. Scripturile PHP pot fi incluse în paginile Web în diferite moduri, uzual folosindu-se construcţia:

< ?php

? >

Comentariile pot fi scrise în stilul comentariilor din limbajele C/C++ ori Perl

/*

*/

sau

sau

Caracterul terminal Declaraţiile şi instrucţiunile se separă prin „;" ca şi în C, Perl sau Java

;

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

Funcţionarea analizorului (motorului) PHP este următoarea: preprocesorul PHP va detecta construcţiile PHP delimitate între tag-urile <?php şi ?> şi le va interpreta, ignorând restul conţinutului documentului pe care îl va trimite, la ieşirea standard, nealterat. Astfel, putem privi analizorul PHP ca un script CGI care efectuează o preprocesare specială înainte ca datele să fie expediate clientului Web. PHP se bazează pe motorul de scripting Zend.

3. Tipurile de date

Tipurile de date simple suportate sunt cele scalare:

1. Valori logice (boolean),

2. Numere întregi (integer),

3. Numere reale în virgulă mobilă (float, double, real)

4. Şir de caractere (string).

Tipurile de date structurate sunt reprezentate de:

1. Tipul tablou (array) - indexat şi asociativ

2. Tipul obiect (object)

Tipurile de date speciale sunt reprezentate de:

1. Tipul resursă (resource)

2. Tipul nul (NULL)

în

acest ultim caz inhibându-se evaluarea variabilelor din interiorul şirului respectiv (exact ca la script-urile bash ori Perl),

Şirurile de caractere se pot delimita între ghilimele (”… ”) sau caracterele apostrof (’

’),

Variabilele în PHP se reprezintă prin intermediul unui identificator prefixat de caracter „$”.

Numele variabilei este case-sensitive (i.e. variabila $PHP este diferită de din caractere alfa-numerice şi simbolul „_".

$php) şi este compus

Tipul unei variabile se determină funcţie de valoarea pe care o stochează. Variabilele se pot folosi fără a trebui să fie declarate în prealabil. Există, de asemenea, şi diverse variabile predefinite, mai ales cele specifice serverului Web. Tot ca variabile sunt transmise unui script PHP câmpurile formularelor HTML dintr-o pagină sau cookie-urile. Un tip special sunt variabilele globale (globals) care stochează diverse categorii de variabile externe (de exemplu $_GET, $_POST, $_COOKIES, $_ENV etc.).

Observaţii:

Din motive de lizibilitate, au fost introduse trei pseudo-tipuri: mixed, number şi callback. Tipul double are aceeaşi semnificaţie cu cea a tipului float. Cele două denumiri coexistă doar din motive "istorice". În PHP, de obicei, tipul unei variabile nu este specificat de către programator, ci este stabilit în timpul execuţiei în funcţie de contextul în care este folosită variabila.

Tipul boolean

Variabilele de acest tip pot avea doar două valori: TRUE sau FALSE. Aceste valori sunt indicate prin cuvintele cheie TRUE sau FALSE (pentru ambele nu se face distincţie între literele mari şi

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

literele mici). Există posibilitatea de a converti o variabilă de orice tip la tipul boolean. În momentul efectuării unei conversii, sunt convertite la valoarea FALSE următoarele valori:

numărul întreg 0;

numărul real 0.0;

şirul vid; şirul "0";

un vector fără nici un element;

un obiect fără nici o variabilă membru;

o variabilă de tipul NULL;

o variabilă nedefinită.

Orice altă valoare este convertită la valoarea TRUE (inclusiv resursele). Acest tip se poate folosi, de exemplu, pentru verificarea logării într-o pagină de administrare. După ce se fac verificările, dacă utilizatorul este logat ca administrator, funcţia noastră pentru verificarea logării poate returna valoarea de adevăr (TRUE), dacă este logat sau valoarea contrară (FALSE) dacă nu este logat, şi astfel vom şti dacă să îi acordăm sau nu acces utilizatorului în secţiunea de administrare.

Tipul integer

O variabilă de tip integer reprezintă o valoare din mulţimea numerelor întregi. Aceste numere pot fi specificate în baza 10, în baza 16 sau în baza 8, convenţiile fiind aceleaşi ca şi în limbajele C/C++ sau Java. Modul de reprezentare depinde de platforma utilizată; de obicei se foloseşte reprezentarea

pe 32 de biţi.

Interpretorul PHP nu oferă suport pentru numerele întregi fără semn. Trebuie remarcat faptul că în

PHP nu există nici un operator pentru efectuarea de împărţiri întregi. De exemplu, rezultatul operaţiei 3/2 nu va fi numărul întreg 1 (ca în C/C++ sau Java), ci numărul real (float) 1.5 Şi pentru numerele întregi există posibilitatea efectuării de conversii:

Valoarea logică TRUE este convertită la valoarea întreagă 1;

Valoarea logică FALSE este convertită la valoarea întreagă 0;

Un număr real este convertit prin "rotunjire înspre 0". Aşadar, valoarea reală 2.5 va fi convertită la valoarea întreagă 2, în timp ce valoarea reală -2.5 va fi convertită la valoarea întreagă -2;

Un şir de caractere este convertit luând în considerare doar primele caractere care conţin informaţii numerice. Aşadar şirul "10" va fi convertit la valoarea întreagă 10. De asemenea şirul "10 ani" va fi convertit tot la valoarea 10; daca primele caractere nu conţin informaţii numerice, rezultatul conversiei va fi valoarea 0.

Tipul float

O variabilă de tip float poate fi specificată folosind fie forma zecimală, fie cea ştiinţifică (cu

exponent). La fel ca şi în cazul tipului integer, precizia variabilelor de tipul float este dependentă de platforma utilizată. De obicei se foloseşte standardul IEEE 64. Există posibilitatea de a converti o variabilă de orice tip la tipul float. Pentru numerele reale se pot efectua următoarele conversii:

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

Un şir de caractere este convertit luând în considerare doar primele caractere care conţin informaţii numerice; aşadar şirul "10.2" va fi convertit la valoarea reală 10.2; şirul "1.23E1 ani" va fi convertit la valoarea 12.3;

În toate celelalte cazuri se realizează conversii la numere întregi care apoi sunt convertite la valorile reale corespunzătoare.

Tipul string

O variabilă de tip string reprezintă un şir de caractere.

Un caracter se reprezintă pe un octet, deci sunt 256 de caractere distincte. Acest lucru implică faptul că interpretorul PHP nu oferă suport nativ pentru setul de caractere Unicode. Lungimea variabilelor de tip string nu este limitată de către interpretor.

Literalii de tip şir de caractere pot fi specificaţi în trei moduri diferite:

Prin folosirea ghilimelelor simple (apostrofelor) ' (Exemplu: $a='acesta este un sir de caractere'). Pentru a avea în cadrul şirului simbolul apostrof " ' ", atunci înaintea acestuia trebuie scris caracterul "\", iar pentru a putea specifica simbolul "\" acesta trebuie dublat.

Prin folosirea ghilimelelor duble ". Folosind această notaţie, pot fi specificate mai multe caractere speciale, pe lângă caracterele de la varianta anterioară, printre care:

a) sfârşit de linie ("\r")

b) rând nou ("\n")

c) tab orizontal ("\t")

d) semnul dolar ("\$")

e) ghilimelele duble ("\"")

f) secvenţe de caractere pentru specificarea expresiilor regulate în notaţie octală

("\[0-7]{1,3}")

g) secvenţe de caractere pentru expresiile regulate în notaţie hexazecimală

("\x[0-9A-Fa-f]{1,2}").

Cel mai important lucru este acela că, folosind acest mod de specificare a literalilor de acest tip, numerele de variabile care apar în interior vor fi transformate în valoarea lor. De exemplu, dacă $a este o variabilă de tipul integer şi are valoarea 2, atunci şirul de caractere "Variabila a are valoarea $a." va fi transformat în şirul "Variabila a are valoarea 2".

Notaţia heredoc. Acest tip de notaţie a fost introdus la versiunea 4 a interpretorului PHP. Pentru a specifica un şir de caractere folosind această notaţie, trebuie utilizat operatorul "<<<" urmat de un identificator ales de utilizator. Toate caracterele care se află între operatorul "<<<", urmat de un identificator pe o singură linie, şi acelaşi identificator pe o altă linie, vor constitui valoarea şirului de caractere. De exemplu, instrucţiunea: $str=<<<SF. Acesta este un exemplu de utilizare a sintaxei heredoc SF; va avea ca rezultat un şir de caractere format din trei linii de text.

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

Pentru a accesa un anumit caracter din şirul de caractere, se foloseşte, după numele variabilei de tip string, indicele caracterului care trebuie accesat scris între acolade. De exemplu, $str{0} returnează primul caracter din şirul de caractere $str.

În cazul în care dorim să concatenăm două şiruri de caractere, vom folosi operatorul "." Folosirea operatorului "+" nu va concatena cele două şiruri.

Există posibilitatea de a converti o variabilă de orice tip la tipul string. Pentru şirurile de caractere, se pot efectua următoarele conversii:

Valoarea logică TRUE va fi convertită la şirul "1", iar valoarea logică FALSE va fi convertita la şirul vid (""); Un număr întreg va fi convertit la un şir de caractere care reprezintă valoarea numărului în baza

10;

Un număr real va fi convertit la un şir de caractere care reprezintă notaţia ştiinţifică a acestuia; Obiectele sunt întotdeauna convertite la şirul "Object"; Variabilele de tipul resource sunt convertite la şirul "Resource id #n", unde n reprezintă un număr unic ataşat resursei respective de către interpretorul PHP; Valoarea NULL este convertită la şirul vid ("").

Variabile predefinite

$GLOBALS = pot fi accesate toate variabilele globale care sunt accesibile script-ului PHP curent

$_SERVER = conţine o serie de variabile ale căror valori sunt setate de server-ul web; majoritatea valorilor variabilelor din acest vector depind de mediul de execuţie al script-ului curent.

$_GET şi $_POST conţin variabile primite de script prin intermediul unor transferuri care folosesc metodele HTTP get, respectiv post. De exemplu, prin intermediul acestor vectori, pot fi accesate valorile câmpurilor dintr-un formular care a fost completat şi transmis folosind una dintre cele două metode.

$_COOKIE conţine valorile variabilelor care cuprind informaţii referitoare la cookie-urile păstrate pe calculatorul utilizatorului ce accesează pagina Web.

$_FILES conţine variabile primite de script prin intermediul încărcărilor de fişiere prin metoda post.

$_ENV conţine variabile disponibile prin intermediul mediului în care este executat.

$_REQUEST conţine variabile disponibile prin intermediul oricărui tip de mecanism cu ajutorul căruia utilizatorul poate introduce date.

$_SESSION conţine variabile care corespund sesiunii curente a script-ului.

Tipul array

Vectorii în PHP sunt mulţimi formate din chei. Fiecărei chei din vector i se ataşează o valoare. Acest tip de date este optimizat astfel încât să poată fi folosit în locul următoarelor structuri de date:

liste, tabele de dispersie, dicţionare, colecţii, stive, cozi şi altele.

Datorită faptului că o valoare poate fi chiar un alt vector, se pot simula foarte uşor arborii n- dimensionali sau tablourile n-dimensionale. Valoarea unei variabile de tip vector se poate specifica folosind construcţia:

array (cheie => valoare, cheie => valoare,

)

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

De exemplu, următoarea instrucţiune PHP va construi un vector cu două elemente, dintre care unul este de tip string, iar celălalt de tip boolean:

$a = array('ch' => 'string', 12 => TRUE);

Variabila $a reprezintă un vector, $a["ch"] are valoarea string, iar $a[12] are valoarea TRUE. În cazul în care nu se specifică o cheie pentru o valoare, atunci acea valoare va fi ataşată unei chei care va fi cheia maximă de tip integer folosită anterior, la care se adaugă valoarea 1. Cheile pot avea şi valori negative.

Dacă nu există chei de tip integer, atunci valoarea va fi ataşată cheii 0. De exemplu, următoarele două instrucţiuni sunt echivalente:

array(5 => 43, 32, 56, 'b' => 12); array(5 => 43, 6 => 32, 7 => 56, 'b' => 12);

Dacă se foloseşte valoarea logică TRUE ca şi cheie, atunci aceasta va fi convertită la cheia de tip întreg 1, iar valoarea FALSE va fi convertită la numărul întreg 0. Nu se pot folosi pentru chei variabile de tipul array sau object.

O variabilă de tip array se poate modifica prin setarea explicită de valori. De exemplu instrucţiunea:

$a["x"] = 42;

adaugă în vectorul $a valoarea 42 ataşată cheii "x".

Dacă se foloseşte un vector care nu a fost definit anterior, atunci acesta este creat automat. Aşadar printr-o instrucţiune de forma $a[5] = 42, în cazul în care vectorul $a nu există, atunci se va crea un vector cu un singur element. Cheia acestuia va fi numărul întreg 5, iar valoarea sa va fi 42.

De asemenea, există posibilitatea de a crea un element nou fără a-i preciza cheia. Sintaxa are forma :

$vector[] = valoare;

Aceasta instrucţiune are ca efect adăugarea unui element a cărui cheie este un număr întreg mai mare cu 1 decât cel mai mare număr întreg care este cheie a unui alt element al vectorului. Dacă nu există nici o astfel de cheie, atunci noul element va avea cheia 0.

De exemplu, următoarele două secvenţe sunt echivalente:

$a[5] = 1; $a[6] = 2;

$a[5] = 1; $a[] = 2;

Prin conversia la un vector a unei variabile de tip scalar (boolean, integer, float, string) sau resource se creează un vector cu un singur element; cheia acestui element este numărul întreg 0, iar valoarea este cea a variabilei convertite.

Dacă se converteşte un obiect (variabilă de tip object), atunci vectorul rezultat va conţine câte un element pentru fiecare variabilă membru a obiectului. Cheile elementelor vor fi date de denumirile

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

proprietăţilor obiectului (variabilele membru ale obiectului), iar valorile elementelor vor fi valorile proprietăţilor obiectului.

Dacă realizăm o conversie a unei variabile de tip NULL, atunci rezultatul va fi un vector vid (care nu conţine nici un element).

În continuare sunt prezentate câteva exemple care descriu mai detaliat posibilităţile oferite de folosirea vectorilor în PHP.

Pentru început, iată un vector ale cărui elemente reprezintă caracteristicile unei portocale:

<?php $a = array ('denumire' => 'portocala', 'familie' => 'citrice', 'culoare' => 'portocaliu', 'forma' => 'rotunda', 'gust' => 'dulce' ); echo $a['denumire'].' <br> '.$a['familie']; ?>

Putem adăuga şi alte elemente care să reprezinte diferite alte proprietăţi. De exemplu, am putea avea nevoie de o valoare suplimentară căreia nu dorim să îi atribuim nici un nume de identificare (cheie). Pentru ca vectorul să conţină un element suplimentar cu valoarea 4, vom putea defini vectorul astfel:

<?php $v = array ('denumire' => 'portocala', 'familie' => 'citrice',
<?php
$v = array ('denumire' => 'portocala',
'familie' => 'citrice',
'culoare' => 'portocaliu',
'forma' => 'rotunda',
'gust' => 'dulce',
4
);
echo $v['denumire'].' <br> '.$v['familie'];
?>
Scriptul 1.1.
“array1.php” - Cheia elementului cu valoarea 4 va fi numărul întreg 0 deoarece nu există nici o
altă cheie care este număr întreg.

<?php $v['denumire'] = 'portocala'; $v['familie'] = 'citrice'; $v['culoare'] = 'portocaliu'; $v['forma'] = 'rotunda'; $v['gust'] = 'dulce'; $v[] = 4;

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

echo $v['denumire'].' <br> '.$v['familie']; ?> Scriptul 1.2. “array2.php” - O
echo $v['denumire'].' <br> '.$v['familie'];
?>
Scriptul 1.2.
“array2.php” - O alternativa de construire a aceluiaşi vector « v » cu acelaşi rezultat în browser.

<?php $fructe = array ( 'denumire' => array('p' => 'portocala', 'a' => 'ananas', 'm' => 'mar'), 'numere' => array(1, 2, 3, 4, 5, 6), 'ordine' => array('prima', 5 => 'a II-a', 'a III-a') ); echo 'Denumire: '.$fructe['denumire']['p'].' - '.$fructe['denumire']['a'].' <br>'; echo 'Numere: '.$fructe['numere'][0].' - '.$fructe['numere'][1].' <br>'; echo 'Ordine: '.$fructe['ordine'][0].' - '.$fructe['ordine'][5].' <br>'; ?>

[ 'ordine' ][ 5 ]. ' <br>' ; ?> Scriptul 1.3. “array3.php” - Folosirea unor array-uri

Scriptul 1.3.

“array3.php” - Folosirea unor array-uri ale căror elemente sunt alte array-uri.

Tipul object

Pentru a defini un obiect care poate fi folosit pentru afişarea mesajului “Salutare lume!”, se scrie următoarea secvenţă:

<?php class Salutare {

function AfiseazaSalutare() { echo 'Salutare lume!';

}

}

$a = new Salutare; echo $a -> AfiseazaSalutare();

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

?> Scriptul 1.4. “clasa.php” – Definirea unui obiect elementar cu o singură metodă
?>
Scriptul 1.4.
“clasa.php” – Definirea unui obiect elementar cu o singură metodă

Se observă faptul că este afişat textul “Salutare lume!”, text ce l-am introdus în funcţia AfiseazaSalutare(). Pentru a utiliza o variabila de tip obiect, va trebui să realizăm o instanţiere a obiectului prin intermediul instrucţiunii new. Sintaxa ei este:

$a = new Salutare

Astfel, variabila $a devine un obiect ale cărui metode pot fi utilizate. Pentru afişarea propriu-zisă a mesajului va trebui să executăm metoda AfiseazaSalutare() printr-o instrucţiune de tipul:

$a-> AfiseazaSalutare();

Orice variabilă de un anumit tip poate fi convertită într-un obiect :

Dacă variabila respectivă este un obiect, atunci ea nu va fi modificată. În caz contrar, efectul conversiei este crearea unei noi instanţe a clasei stdClass.

Dacă variabila are tipul NULL, atunci noua instanţă va fi vidă. În toate celelalte cazuri, instanţa va conţine o variabilă membru numită scalar a cărei valoare va fi cea a variabilei convertite.

Pentru conversii se folosesc instrucţiuni de tipul $obiect = (object) "Salutare lume!". După realizarea conversiei, se poate tipări mesajul “Salutare lume!” folosind instrucţiunea echo $obiect->scalar;

Tipul resource

Variabilele de tip resource sunt folosite pentru păstrarea unor referinţe către anumite resurse externe cum ar fi conexiuni la baze de date, fişiere, etc. Resursele sunt create şi utilizate de anumite funcţii speciale. Datorită specificului acestui tip de date, valoarea nici unei variabile de alt tip nu poate fi convertită la tipul resource.

Tipul NULL

Valoarea specială NULL este atribuită oricărei variabile care nu a fost încă iniţializată. Această valoare este singura pe care o pot avea variabilele de tip NULL.

Se consideră că o variabilă are tipul NULL dacă:

i s-a atribuit constanta NULL;

nu a fost iniţializată;

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

a fost deziniţializată (prin intermediul funcţiei unset () ).

Constantele pot fi considerate variabile ale căror valori sunt fixate şi nu mai pot fi alterate pe parcursul programului. O constantă stochează o valoare, precum face şi o variabilă, dar această valoare nu mai poate fi modificată în script, după ce a fost stabilită (i.e. constanta a fost definită).

Pentru a defini o constantă se va folosi construcţia sau funcţia define( ). Numele constantelor va fi scris, de obicei cu majuscule. Aceasta opţiune nu este obligatorie, însă este recomandabilă deoarece va face codul mai frumos şi mai lizibil. O diferenţă importantă între constante şi variabile, este faptul că o constantă nu are în faţa ei semnul $.

Exemplul 1.5.

Definirea constantelor

<?php define('AUTOR', 'Eugen ZAHARESCU'); define('VARSTA', '50 de ani'); echo "<u>Autorul manualului este:</u> <b>".AUTOR.'</b> <br> '.'<u>Initializat in urma cu:</u> <b>' .VARSTA."</b>"; ?>

Ca exemple de constante predefinite se pot da PHP_VERSION, PHP_OS sau CHAR_MAX.

4.

Operatorii

PHP pune la dispoziţie un set impresionant de operatori. Aceşti operatori sunt cei disponibili în limbaje precum C sau Perl. Categoriile importante de operatori sunt:

Operatorii aritmetici (+, -, *, /, %) sunt cei cunoscuţi din clasicele limbaje C/C++, Java, etc.

 

Operatorii aritmetici

Exemple

Nume

Rezultat

$a + $b

Adunare

Suma lui $a cu $b.

$a - $b

Scădere

Diferenţa dintre $a şi $b.

$a * $b

Înmulţire

Produsul lui $a cu $b.

$a / $b

Împărţire

Câtul împărţirii lui $a la $b.

$a % $b

Modulo

Restul împărţirii lui $a la $b.

Operatorii de asignare („=” sau „+=")

Exemplul 1.6.

Utilizarea operatorilor de asignare „=” , „+=" şi concatenare „.=”

<?php //Operatori de asignare "=" sau "+=" $a = ( $b = 4 ) +

<?php //Operatori de asignare "=" sau "+=" $a = ($b = 4) + 5; // $a este egal cu 9 si $b a fost setat la 4. echo "a=",$a,"<br />","b=",$b; $a = 3; $a += 5; // seteaza $a la 8, ca si in expresia: $a = $a + 5; $b = "Salut "; $b .= "PHP!"; // seteaza $b la "Salut PHP!", ca si in $b = $b . "PHP!"; echo "a=",$a,"<br />","b=",$b; ?>

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

Operatorii la nivel de bit (&,|,^, ~, <<, >>)

,

Operatorii la nivel de bit

Exemple

Nume

Rezultat

$a & $b

And

Biţii setaţi la 1 în $a şi în $b vor fi setaţi la 1. („şi” bit cu bit)

$a | $b

Or

Biţii setaţi la 1 fie $a, fie în $b vor fi setaţi la 1. („sau” bit cu bit)

$a ^ $b

Xor

Biţii setaţi 1 fie $a, fie în $b dar nu simultan vor fi setaţi 1. („sau exclusiv”)

~ $a

Not

Biţii setaţi la 1 în $a, vor fi resetaţi la 0, şi vice versa. („not” bit cu bit)

$a << $b

Shift left

Deplasează $b poziţii spre stânga biţii lui $a.

$a >> $b

Shift right

Deplasează $b poziţii spre dreapta biţii lui $a.

Operatorii relaţionali (ca noutate se poate menţiona aici „===" care are ca rezultat constanta TRUE dacă operanzii au valori identice şi în plus sunt de acelaşi tip)

 

Operatorii relaţionali

Exemple

Nume

Rezultat

$a == $b

Egalitate

TRUE dacă $a este egal cu $b.

$a === $b

Identitate

TRUE dacă $a este egal cu $b şi sunt de acelaşi tip. (PHP 4)

$a != $b

Diferit

TRUE dacă $a nu este egal cu $b.

$a <> $b

Diferit

TRUE dacă $a nu este egal cu $b.

$a !== $b

Non-identitate

TRUE dacă $a nu este egal cu $b sau nu sunt de acelaşi tip. (PHP 4)

$a < $b

Mai mic decât

TRUE dacă $a este strict mai mic decât $b.

$a > $b

Mai mare decât

TRUE dacă $a este strict mai mare decât $b.

$a <= $b

Mai mic sau egal cu

TRUE dacă $a este mai mic sau egal cu $b.

$a >= $b

Mai mare sau egal cu

TRUE dacă $a este mai mare sau egal cu $b.

Un alt operator condiţional este operatorul terţiar "? :". Expresia (expr1) ? (expr2) : (expr3) se evaluează la expr2 dacă expr1 este evaluată la valoarea TRUE şi la expr3 dacă expr1 este evaluată la valoarea FALSE.

Exemplul 1.7.

Utilizarea operatorului condiţional terţiar "?:". Structura (expr1) ? (expr2) : (expr3)

<?php //Operator condiţional tertiar "?:". Structura (expr1) ? (expr2) : (expr3) $variabila = "CORECTA"; echo $variabila == "CORECTA" ? "Variabila are valoarea CORECTA" : "Variabila nu are valoarea CORECTA"; ?>

Operatori de control al erorilor („@” )(există un singur operator „@” care inhibă erorile ce pot apărea în cadrul expresiei pe care o prefixează),

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

Operatori de incrementare / decrementare („++” şi „—”)

 

Operatori de incrementare / decrementare

Exemple

Nume

Rezultat

++$a

Pre-increment

Incrementează $a cu 1, apoi întoarce $a.

$a++

Post-increment

Întoarce $a, apoi incrementează $a cu 1.

--$a

Pre-decrement

Decrementează $a cu 1, apoi întoarce $a.

$a--

Post-decrement

Întoarce $a, apoi decrementează $a cu 1.

Operatori logici (and sau „&&", or sau „| |", xor, „!")

 

Operatori logici

Exemple

Nume

Rezultat

$a and $b

And

TRUE dacă ambele $a şi $b sunt TRUE.

$a && $b

And

TRUE dacă ambele $a şi $b sunt TRUE.

$a or $b

Or

TRUE dacă fie $a sau $b sunt TRUE.

$a || $b

Or

TRUE dacă fie $a sau $b sunt TRUE.

$a xor $b

Xor

TRUE dacă fie $a, fie $b sunt TRUE, dar nu simultan ambele.

! $a

Not

TRUE dacă $a nu este TRUE.

Operatori pentru şiruri de caractere Se defineşte operatorul de concatenare „.” similar celui din Perl. Poate fi folosit, de asemenea şi operatorul de test „ ? :" şi operatorul de concatenare („.=”), care adaugă argumentului din partea stângă, argumentul din partea dreaptă.

Exemplul 1.8.

Utilizarea operatorului de concatenare "." pentru şiruri de caractere

<?php //operatorul de concatenare "." pentru siruri de caractere $a = "Hello "; $b = $a . "World!"; // $b contine "Hello World!"

$a = "Hello "; $a .= "World!"; ?>

// $a contine de asemenea "Hello World!"

5. Instrucţiunile limbajului PHP

Instrucţiunile limbajului PHP sunt cele uzuale din alte limbaje de programare. Sunt disponibile instrucţiuni de atribuire (de forma $variabilă = expresie), instrucţiuni de test (if şi switch), instrucţiuni repetitive (while, do, for, foreach) şi instrucţiuni de control (break, continue, return).

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

5.1. Structuri condiţionale

5.1.1. Instrucţiunea if

<?php if (expresie) instrucţiune ?>
<?php
if (expresie)
instrucţiune
?>

Mai întâi, expresie (de tipul boolean) este evaluată la valoarea ei logică. Dacă expresie este evaluată la valoarea TRUE, atunci PHP va executa instrucţiune iar dacă expresie este evaluată la valoarea FALSE atunci PHP va ignora instrucţiune.

5.1.2. Instrucţiunea else

Instrucţiunea else este executată dacă expresia logică după if este evaluată la valoarea FALSE ca şi toate expresiile logice elseif succesoare (dacă există). Altfel spus, toate expresiile logice predecesoare trebuie sa fie evaluate la valoarea FALSE.

<?php

$a=1;$b=2;

if ($a > $b) { echo "a mai mare decat b";} else { echo "a NU este mai mare decat b";}

?>

if ( $a > $b ) { echo "a mai mare decat b" ;} else {

5.1.3. Instrucţiunea elseif

Instrucţiunea elseif este o combinaţie de if and else. Precum else, extinde o instrucţiune if pentru a executa o alta instrucţiune diferită în cazul în care expresia logică originală if este evaluată la FALSE. Totuşi, spre deosebire de else, ramura alternativă va fi executată dacă şi numai dacă expresia condiţională elseif este evaluată la TRUE.

Exemplul 1.9.

Utilizarea structurii condiţionale if

elseif

else

<?php //Structura conditionala if elseif else

 

$a=1;$b=2;

if ($a > $b) {echo "a mai mare decat b";} elseif ($a == $b) {echo "a este egal cu b";} else {echo "a mai mic decat b";}

?>

Pot fi mai multe elseif în aceeaşi instrucţiune if. Prima alternativă elseif pentru care expresia logică este evaluată la TRUE va fi executată. În PHP, se poate scrie 'else if' (în 2 cuvinte) cu acelaşi comportament, identic ca şi în cazul lui 'elseif' (într-un singur cuvânt).

5.1.4. Instrucţiunea switch

Instrucţiunea switch este asemănătoare cu o serie de instrucţiuni if cu aceeaşi expresie logică. În multe situaţii, se doreşte compararea aceleiaşi variabile (sau expresii) cu mai multe valori diferite şi

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

să se execute secvenţe diferite de cod depinzând de valoarea ei la un moment dat. Instrucţiunea structurată switch a fost proiectată tocmai pentru acest lucru.

Notă: Spre deosebire de alte limbaje de programare, instrucţiunea continue se aplică şi acţionează similar cu break. Dacă există un switch în interiorul unui ciclu şi se doreşte să se continue cu următoarea iteraţie a ciclului exterior, se va utiliza continue 2.

Următoarele 2 exemple ilustrează două modalităţi de a scrie acelaşi lucru: una prin utilizarea unei cascade de instrucţiuni if şi elseif, şi alta prin utilizarea instrucţiunii switch:

Exemplul 1.10.

Utilizarea structurii condiţionale „if

elseif”

şi echivalentul ei „switch

case”

<?php //Structura conditionala if

elseif

si echivalentul ei switch

case

$i=0;

echo "STRUCTURA CONDITIONALA if

elseif<br

/>";

if ($i == 0) { echo "i este egal cu

0";

}

elseif ($i == 1) { echo "i este egal cu

1";

}

elseif ($i == 2) { echo "i este egal cu

2";

}

echo "<br /><br />STRUCTURA CONDITIONALA switch switch ($i) { case 0:

case<br

/>";

echo "i este egal cu break; case 1:

0";

echo "i este egal cu break; case 2:

1";

echo "i este egal cu break;

2";

}

?>

Pentru a evita greşelile este important de înţeles cum este executată instrucţiunea switch. Instrucţiunea switch se execută linie cu linie (de fapt, instrucţiune cu instrucţiune). La început, nu se execută nici un cod. Numai când se întâlneşte o instrucţiune case cu o valoare care se potriveşte valorii expresiei switch atunci PHP începe într-adevăr să execute instrucţiunile alternativei respective. PHP va continua să execute instrucţiunile până la sfârşitul blocului switch, sau până la prima apariţie a instrucţiunii break. Dacă nu se adaugă o instrucţiune break la sfârşitul listei de instrucţiuni case, PHP va continua să execute instrucţiunile următoarei alternative case.

Exemplul 1.11.

Utilizarea structurii condiţionale „switch

case”

fără break

<?php

//Fara break la sfârsitul listei de instructiuni case

//

PHP

va continua sa execute instructiunile urmatoarei alternative case

$i=0;

switch ($i) { case 0:

 

echo "i este egal cu case 1:

0<br />";

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

echo "i este egal cu case 2:

1<br />";

echo "i este egal cu

2<br />";

}

?>

În acest exemplu, dacă $i este egal cu 0, PHP ar executa toate instrucţiunile echo. Dacă $i este egal cu 1, PHP ar executa ultimele 2 instrucţiuni echo. Comportamentul dorit se obţine numai dacă $i este egal cu 2 (i.e. va fi afişat textul 'i este egal cu 2'). De aceea este important să nu se uite inserarea instrucţiunilor break în structura de ramificare multiplă switch.

Într-o instrucţiune switch, condiţia este evaluată numai o dată şi rezultatul este comparat cu fiecare instrucţiune case. Într-o instrucţiune elseif, condiţia este evaluată din nou. Dacă condiţia este mai complicată decât o simplă comparaţie şi/sau se află într-un ciclu foarte strâns, o instrucţiune switch poate fi mai rapidă.

Lista de instrucţiuni pentru un case poate fi de asemenea vidă, ceea ce face să treacă controlul spre lista de instrucţiuni a următorului case.

Exemplul 1.12.

Utilizarea structurii condiţionale „switch

case”

cu alternative vide

<?php //Structura case cu alternative vide

 

$i=0;

switch ($i) { case 0:

case 1:

case 2:

echo "i este mai mic decat 3 dar nu negativ"; break; case 3:

 

echo "i este 3";

 

}

?>

O situaţie specială o reprezintă alternativa case denumită default. Această alternativă corespunde oricăror altor cazuri care nu s-au potrivit celorlalte alternative case şi trebuie să fie ultima instrucţiune (alternativă) case.

Exemplul 1.13.

Utilizarea structurii condiţionale „switch

case”

cu alternativa default

<?php //Structura case cu alternativa default

 

$i=3;

switch ($i) { case 0:

echo "i este egal cu break; case 1:

0";

echo "i este egal cu break; case 2:

1";

echo "i este egal cu

2";

Eugen ZAHARESCU – CURS DE PHP(PHP Hypertext Preprocessor)

break;

default:

echo "i nu este egal cu 0, 1 sau 2";

}

?>

break; default: echo "i nu este egal cu 0, 1 sau 2" ; } ?>

Expresia case poate fi orice expresie care poate fi evaluată la un tip simplu de dată: integer,

objects nu pot fi utilizate decât dacă ele sunt

redefinite ca tipuri simple. Se pot utiliza şi alte sintaxe, alternative, pentru structurile de control ale ramurilor instrucţiunii structurate switch:

floating-point numbers sau strings. Arrays sau

Exemplul 1.14.

Utilizarea structurii condiţionale „switch

case”

cu sintaxa alternativă ":" + endswitch

<?php //Structura case cu sintaxe alternative ":" + endswitch;

$i=3;

switch ($i):

case 0:

echo "i este egal cu break; case 1:

0";

 

echo "i este egal cu break; case 2:

1";

echo "i este egal cu

2";

break;

default:

echo "i nu este egal cu 0, 1 sau 2"; endswitch; ?>

 

5.2. Structuri repetitive

5.2.1. Instrucţiunea while

Ciclurile while reprezintă cele mai simple cicluri în PHP. Ele se comportă exact precum structurile similare din limbajul C. Structura de bază a sintaxei unei instrucţiuni while este:

while (expresie) instrucţiune;
while (expresie) instrucţiune;

Instrucţiunea while determină PHP să execute instrucţiunile incluse în mod repetat, atâta timp cât expresia while este evaluată la valoarea TRUE. Valoarea expresiei este verificată de fiecare dată la