Documente Academic
Documente Profesional
Documente Cultură
Un calculator (sistem de calcul, computer) este o main de prelucrat informaii, conform unei specificaii numit program. Prelucrare Informaii (de intrare)
Pentru calculator, informaie nseamn o secven de bii (sau de cifre de 0 i 1). Pentru calculator, orice este o secven de bii. Pentru noi, ns, o astfel de secven de bii este neinteligibil. Oamenii au nevoie de informaii structurate. Pentru a supravieui, oamenii trebuie s se hrneasc, altfel spus au nevoie de un aport de principii nutritive, cum ar fi: proteine, lipide i carbohidrai. Dar, nimeni nu consum, de fapt, proteine, lipide, carbohidrai n stare pur, dect, poate atunci cnd i se face perfuzie. Altfel, consumm doar proteine, lipide, carbohidrai deghizate sau ambalate n nite alimente mai mult sau mai puin apetisante, sau sntoase. i asta pentru c nu nelegem principiile alimentare dect atunci cnd sunt prezentate sub forma alimentelor. Variabila este forma de baz n care este omul poate nelege i manipula informaia, n raport cu calculatorul. Atenie! Aceast definiie este una proprie, deci neacceptat unanim. De fapt, nu cred c exist o definiie unanim acceptat. Definiia pe care am identificat-o n mai multe lucrri sun cam aa: o variabil este o locaie de memorie, care conine o anumit informaie. Consider, totui, c definiia formulat de mine este mai sugestiv, deoarece evideniaz un lucru esenial: variabilele au sens doar pentru oameni, nu pentru calculatoare. Noi suntem cei care avem nevoie de variabile pentru a ne exprima n raport cu calculatorul, ca i pentru a nelege informaiile precizate de acesta. Prin urmare, atunci cnd vorbim cu calculatorul i furnizm informaii de intrare n variabile i l form s ne furnizeze informaiile de ieire tot n variabile (excepiile confirm regula). Pentru a conversa cu calculatorul, trebuie s folosim o limb pe care acesta o poate nelege. Singura limb pe care acesta o nelege este codul-main, o limb, din pcate, extrem de greu de neles pentru oameni. De aceea, n raporturile lor cu calculatoarele, oamenii folosesc limbaje evoluate (de programare, dar nu numai). Pentru a nelege aceste limbaje, ca i pentru a formula rspunsurile ntr-o form uman, calculatoarele au nevoie de programe speciale, numite, dup caz, compilatoare sau interpretoare. Pentru toate aceste limbi (sau limbaje de programare), noiunea de variabil este una fundamental. De fapt, noiunea de variabil este, pentru un limbaj de programare, ceea ce este noiunea de substantiv pentru o limb natural. Variabilele sunt subiectul aciunii, ele sunt obiectele asupra crora se ndreapt prelucrrile specificate prin program. Noiunea de variabil este, deci, una universal, pentru toate limbajele de programare.
Pag. 1
Dintre cele dinti, aproape toate limbajele utilizeaz variabile de tip numeric (ntreg, real), caracter sau logic/boolean. Dintre variabilele compuse, utilizate de mai toate limbajele, enumerm irurile (tablourile, array-urile) i irurile de caractere (stringurile), precum i structurile, union-urile, mulimile, sau obiectele tipuri care sunt specifice doar anumitor limbaje. Pentru a putea fi referit (accesat), o variabil trebuie s fie numit. Variabilele sunt precum crilor dintr-o bibliotec: sunt alctuite din informaii astfel structurate nct s fie inteligibile (mai mult sau mai puin), poart un nume i au un anumit loc (o adres) unde ne ateptm s le gsim, n mod obinuit. Mai mult dect att, continund analogia, crile dintr-o bibliotec pot avea diferite grade de accesibilitate, n sensul c pot fi consultate de ctre toi cititorii bibliotecii, sau numai de o parte privilegiat a lor, sau, poate, fiind extrem de rare i valoroase, nu pot fi consultate (aproape) de nimeni. Conveniile de nume pentru variabile sunt specifice diverselor limbaje de programare. De exemplu, n PHP, numele de variabil ncep ntotdeauna cu semnul dolar ($). Execuia unui program nu este altceva dect o prelucrare de variabile. Este evident, deci, c, pe parcursul execuiei unui program, variabilele sufer, in general, transformri, modificri ale coninutului lor informaional. Pot fi create, de asemenea, noi variabile n timpul execuiei programului, pot fi distruse alte variabile, pot fi copiate n alte variabile, sau pot fi redenumite. Sunt ns, i variabile al cror coninut informaional, odat ce este iniializat, nu mai poate fi modificat pe parcursul execuiei programului, acelea se numesc constante. Prin excepie, n PHP, numele constantelor nu ncep cu semnul dolar ($). Pentru a fi operaionale, variabilele trebuie iniializate (trebuie s dobndeasc un anumit coninut informaional). Simpla declarare a unei variabile, permis, n general, de toate limbajele, poate fi, uneori, suficient, pentru ca variabila respectiv s fie iniializat cu o anumit valoare implicit, de genul 0 (pentru o variabil numeric), false (pentru una logic), null (sau nimic) pentru alte tipuri de variabile. Uneori, e posibil i s referim o variabil inexistent, fr ca acest lucru s fie imediat taxat ca o eroare: calculatorul creaz variabila respectiv i o iniializeaz cu valoarea implicit; uneori, un astfel de comportament poate s ne fie util, dar, de cele mai multe ori, nu se ntmpl aa, astfel c, n general, trebuie s avem grij ca toate variabilele utilizate de program s fi fost iniializate cu valorile respective corecte nainte de utilizare. Cum se poate iniializa o variabil? n principal, exist dou modalitti de a iniializa o variabil:
Pag. 2
Expresiile reprezint, aadar, o modalitate de creare a unor valori care pot fi atribuite unor variabile. n alte cuvinte, cu ajutorul expresiilor, putem modifica valorile variabilelor existente sau putem crea altele noi. O expresie este o colecie de variabile i valori (numite operanzi), structurate cu ajutorul unor simboluri (numite operatori) i care pot fi evaluate la o valoare care poate fi atribuit unei expresii. S ne aducem aminte cum scriam la matematic: x=2+3 dar i: a=b+c n primul exemplu avem o variabil x, care este iniializat cu valoarea 5, suma valorilor 2 i 3, n al doilea variabila a este iniializat cu suma valorilor variabilelor b i c. Este evident c, pentru a putea face acest lucru, trebuie s cunoatem valorile actuale ale variabilelor respective, i s facem substituiile respective necesare. Adic: n al doilea exemplu, ceea ce se adun nu sunt variabilele b i c, ci valorile lor actuale. Uneori, ns, din comoditate, folosim expresii precum suma variabilelor .... Reinem: orice operator acioneaz asupra unui numr de una, dou sau trei variabile (regula e: dou, una i trei fiind excepii), returnnd o anumit valoare care poate fi atribuit unei variabile. Este esenial s reinem c rezultatul evalurii unei expresii poate fi atribuit ntotdeauna unei variabile; c, n program, nu facem acest lucru ntotdeauna, n mod explicit, e alt discuie. n exemplul matematic utilizat mai sus: a=b+c dac, b este 3 i c este 4, lui a i va fi atribuit, dup evaluarea expresiei, valoarea 7. Pare oarecum lipsit de sens s ntrebm: care este acum valoarea variabilei b, deoarece este evident c este 3, ct a fost i la nceput. De fapt, ntrebarea nu este chiar att de lipsit de sens, deoarece: Exist operatori care modific valoarea operanzilor asupra crora acioneaz. De fiecare dat cnd vom ntlni astfel de operatori, vom preciza acest lucru. Convenia de nume pentru variabile: n PHP, numele de variabile ncep cu semnul dolar ($), urmat de un identificator nevid. Un identificator este (aici) o colecie de caractere care includ: litere mari i mici ale alfabetului englez, cifre (de la 0 la 9), i caracterul liniu de subliniere underscore (_), ncepnd cu o liter sau cu un underscore. Identificatorii nu pot conine spaii.
Pag. 3
Domeniul de vizibilitate al unei variabile: n general, un program PHP consist, din punct de vedere fizic, din mai multe fiiere care se apeleaz unul pe altul. De asemenea, chiar n interiorul unui acelai fiier, sunt definite, de regul, mai multe funcii. Fr niciun calificator (cuvnt care modific domeniul implicit de vizibilitate al unei variabile), o variabil este vizibil (poate fi referit/accesat) doar n fiierul sau/i funcia unde a fost definit. Din acest motiv, putem, n general, folosi, n fiiere sau/i funcii diferite, variabile cu acelai nume, fr s existe niciun conflict. Domeniul de vizibilitate al unei variabile poate fi, ns, modificat dup dorina programatorului, dup cum se va arta ulterior. Variabile superglobale Este vorba, de fapt, de anumite variabile-sistem (furnizate, sau generate, la cerere, de ctre sistem), ale cror valori sunt vizibile din orice funcie, i din orice fiier al programului de fapt, din orice program PHP de pe calculator. Astfel de variabile se numesc superglobale i numele lor ncepe cu un semn dolar ($) urmat de un underscore (_). Numele acestor variabile nu pot fi utilizate de programator pentru a-i crea propriile variabile (nu pot fi suprascrise). De altfel, e recomandabil ca programatorii s nu utilizeze nume de variabile care ar putea fi confundate uor cu cele ale variabilelor superglobale (deci, s nu nceap cu $_). Variabilele superglobale sunt, de fapt tablouri de variabile, coninnd diverse informaii despre sistem, program, i aa mai departe. n general, modificarea direct a valorilor acestor variabile nu este posibil, sau, chiar dac este posibil, nu este recomandabil. Exemple de variabile superglobale: $_GET conine variabilele transmise unui script prin metoda GET
Pag. 4
Numele PHP este acronimul prescurtarea de la Hypertext PreProcessor (de fapt, acest nume a fost creat pentru a se potrivi cu numele limbajului, acesta din urm numindu-se, la nceputuri, Personal Home Page). Codul nativ PHP nu poate fi verificat, n mod natural, de browserul de internet instalat pe calculatorul local, ci numai dac acesta calculatorul local are instalat un server care are i interpretorul de PHP. n fapt, cnd accesm un fiier PHP, de pe un anumit calculator, browserul trimite serverului codul respectiv PHP, acesta l decodific, fcndu-l compatibil HTML, i astfel browserul poate ncrca si afia coninutul respectivului fiier PHP. Codul PHP poate fi incorporat ntr-un script HTML, dar atenie! dac un fiier conine deopotriv cod HTML i PHP, atunci acel fiier nu poate, n general, s fie neles de browserul respectiv, fr a fi decodificat i transpus integral n cod HTML. De aceea, e mai corect s spunem c fiierele PHP pot conine cod HTML, dect invers, cu toate c, din punct de vedere fizic, codul PHP este incorporat n codul HTML. Fiierele PHP au, n general, extensia .php. Mai rar, sunt recunoscute i fiiere cu extensia php3 sau phtml. n general, browserul de internet deschide orice fiier cu extensia .php i citete textul respectiv, pe care l interpreteaz ca fiind cod HTML, pn cnd ntlnete una din etichetele de deschidere a codului PHP. n acel moment, browserul apeleaz serverul i interpretorul PHP existente pe calculatorul care gzduiete fiierul respectiv dac acestea exist citete i interpreteaz codul PHP, pn ntlnete eticheta de nchidere, dup care continu s citeasc i s interpreteze ceea ce urmeaz ca fiind cod HTML. n afar de etichetele de deschidere i nchidere, codul PHP este format din instruciuni. Nu are nicio importan dac o instruciune este scris pe un rnd sau pe mai multe, dup cum nu conteaz dac pe un rnd sunt scrise mai multe instruciuni sau una singur. Esenial este c, n PHP, orice instruciune se termin, n mod obligatoriu, cu semnul punct i virgul semicolon (;). Dup cum am mai spus, numele variabilelor sunt case-sensitive, dar numele funciilor sunt caseinsensitive.
Pag. 5
<?php ?>
Observaie: exist i alte tipuri de etichete, dar, pentru c acestea sunt universal acceptate i cele mai rspndite, nu le mai prezint pe celelalte.
Comentarii: n PHP exist trei modaliti de a scrie comentarii: Dac, pe un rnd, apar semnele //, tot ceea ce urmeaz dup ele (pe acel rnd) este comentariu (stil C); Dac, pe un rnd, apare caracterul #, tot ceea ce urmeaz dup ele (pe acel rnd) este comentariu (stil C#); Tot ceea ce este scris ntre caracterele /* i */ (pe oricte rnduri) este comentariu.
Exemplu:
<?php //Acesta este un comentariu #Acesta este un alt comentariu /*Acesta este un comentariu pe mai multe rnduri*/ ?>
Sfat: nu imbricai comentariile. n cazul n care o facei, gndii-v bine la ceea ce urmeaz. Pentru afiarea unui text simplu, fr formatare, putei folosi constructul echo (sau print), dup cum urmeaz:
<?php echo afiseaza un text simplu; ?>
La fel de bine, n programul de mai sus verificai! se pot folosi ghilimelele simple n locul celor duble sau/i print n loc de echo. Determinarea tipului variabilelor: Limbajul PHP este loosely-typed, ceea ce nseamn c tipul variabilelor se determin dinamic, la iniializarea lor. Mai mult, pe aprcursul unul program, variabilele i pot schimba tipul ori de ate ori sunt reiniializate. Acest lucru poate fi puin derutant pentru cei care nva PHP avnd o oarecare experien de programare ntr-un limbaj strongly-typed (Java, C, C++) dar confer PHP-ului o putere i o versatilitate cu adevrat valoroase. S considerm urmtorul program:
Pag. 6
Explicaii : 1. ncercarea de a accesa o variabil neiniializat (chiar dac a fost definit) este sancionat cu o notificare de ctre sistem. Notificrile sunt avertismente emise de ctre sistem, ori de cte ori i se pare a fi ntlnit ceva curios. Ele nu inhib execuia programului, iar afiarea lor poate fi dezactivat printr-o opiune de sistem (ceea ce e, totui, nerecomandabil n etapa de dezvoltare depanare). 2. Pentru a verifica dac o anumit variabil e de un anumit tip, se pot utiliza funciile is_*(), care se utilizeaz ca mai sus. 3. Prin reiniializare, o variabil i poate modifica tipul. 4. Constructul echo poate fi utilizat pentru a interpreta cod HTML. Respectivul cod trebuie inclus ntre ghilimele duble. 5. Pentru a concatena dou stringuri, se folosete operatorul punct (.). Dac variabilele care urmeaz a fi concatenate nu sunt de tip string, atunci operatorul acioneaz asupra stringurilor rezultate prin transformarea (cast-ul) variabilelor respective. 6. Variabila boolean true se interpreteaz, prin cast, n stringul 1, n timp ce variabila boolean false se interpreteaz ca (stringul vid). 7. Dup declararea unei variabile, dac nu este iniializat, tipul ei este null. 8. Pentru declararea unui ir, putem folosi funcia array(), dup cum se vede mai sus.
Pag. 7
Observaii: 1. Funcia gettype() returneaz tipul variabilei, chiar dac aceasta nu este (un argument n plus c notificrile nu sunt erori, ci, mai degrab, nedumeriri). 2. Cu ajutorul constructului echo putem afia direct (fr ghilimele) coninutul unor variabile de tip numeric. 3. Exist un singur tip real, i anume double (dar, pe care, n anumite situaii, l putem numi i float). 4. Prin settype(), de la real la integer, se pierde partea fracionar, iar de la integer (de fapt, de la orice numeric) la boolean, 0 e false, i orice altceva e true. 5. Conversiile realizate prin settype() sunt ireversibile, deoarece poate avea loc o pierdere de precizie. Conversii prin cast Spre deosebire de conversiile realizate prin settype(), care sunt definitive i ireversibile, prin mecanismul de cast putem fora o conversie temporar a unei variabile. De fapt, n cazul utilizrii funciei settype(), valoarea obinut prin conversie este suprascris n aceeai variabil, n timp ce, n cazul cast-ului, are o informaia respectiv este depozitat ntr-o zon tampon, putnd fi folosit la iniializarea unei alte variabile, ca n exemplul urmtor:
Pag. 8
Nu este nicio problem dac variabila nu exist (funcia isset() returneaz false). Pentru a distruge o variabil, folosim funcia unset():
unset ($var);
Nici funcia unset() nu returneaz nicio eroare dac variabila respectiv nu exist. n schimb, genereaz o eroare fatal dac programul ncearc s distrug ceva ce nu este o variabil (nu ncepe cu semnul $).
Iniializarea prin referin Pn acum am studiat diferite cazuri n care o anumit variabil primete o anumit valoare am putea s-i spunem chiar o valoare cash. Sunt, ns i situaii, n care ceea ce primete o variabil nu este o valoare, ci o adres. Adresa la care se afl o anumit variabil care, la rndul ei, are o anumit valoare. Un fel de cec, aadar. O valoare virtual. Pentru a iniializa o variabil prin referin, folosim semnul (operatorul) &:
<?php $var1 = 3; $var2 = $var1; //$var2 este initializata cu valoarea $var1, adica 3 $var3 = &$var1; //$var3 este un alias/o porecla a variabilei $var1 define('CONSTANTA', $var1); //este initializata o constanta cu valoarea lui $var1, //adica 3 echo $var1." ".$var2." ".$var3."<br/>"; //sunt afisate valorile lui $var1, $var2 si $var3 echo CONSTANTA."<br/>"; // este afisata valoarea constantei $var1 = 5; //$var1 este reinitializata echo $var1." ".$var2." ".$var3."<br/>"; //automat, se modifica si valoarea lui $var3 $var2 = 10; //$var2 este reinitializata echo $var1." ".$var2." ".$var3."<br/>"; //schimbarea nu priveste celelalte variabile $var3 = 1; // se reinitializeaza $var3 echo $var1." ".$var2." ".$var3."<br/>"; //schimbarea se reflecta si in $var1 unset($var3); //se distruge aliasul echo "variabila $var1 este definita? ".isset($var1)."<br/>"; //variabila $var1 continua // sa existe
Pag. 9
Constante Dup cum am mai spus, constantele sunt un tip special de variabile care, odat iniializate, pstreaz aceeai valoare pe toat perioada execuiei programului. Pentru a denumi constantele, se poate utiliza orice identificator. Acesta nu trebuie precedat de semnul dolar ($). Prin convenie, numele de constante folosesc numai litere mari. Astfel, att constanta_mea, ct i CONSTANTA_MEA sunt nume valide de constante, dar prima denumire violeaz cutuma. Spre deosebire de variabile, numele de constante pot fi i case sensitive, i case insensitive, n funcie de modul n care sunt definite. Odat definit, ca fiind case sensitive (sau case insensitive), starea unei constante nu mai poate fi modificat. Implicit, constantele sunt case sensitive. Pot fi definite ca fiind constante: datele de tip integer, double i boolean. Constantele nu se iniializeaz prin atribuire direct. ncercarea de a iniializa o constant astfel (ca i o variabil) conduce la apariia unei erori de sintax:
Parse error: syntax error, unexpected '=' in ...
Aceasta este o eroare fatal (conduce la abandonarea execuiei programului). Pentru a defini o constant, folosii funcia define():
define(CONSTANTA_MEA, 45); // CONSTANTA_MEA este initializata cu valoarea intreaga 45
Folosim aceast definiie pentru a defini constanta CONSTANTA_MEA ca fiind case sensitive (modul implicit). Dac vrem s o definim ca fiind case insensitive (ceea ce presupune c o vom putea referi i prin nume precum Constanta_Mea sau chiar constanta_mea), trebuie s utilizm funcia define() astfel:
define(CONSTANTA_MEA, 45, true);
Cu ajutorul funciei define(), putem defini o constant i pe baza valorii unei variabile:
$var = 45; define(CONSTANTA_MEA, $var); $var = 50; //CONSTANTA_MEA ramane cu valoarea 45
Pentru a afia coninutul unei variabile, putem folosi constructul echo cu variabila ntre ghilimele duble sau fr ghilimele, ca mai jos:
... $var = 1234; ... echo $var; //afiseaza 1234 daca valoarea variabilei $var nu a fost modificata intre timp ... echo $var; //acelasi lucru ...
Pag. 10
n schimb, includerea numelui unei constante ntre ghilimele duble conduce la afiarea numeleui constantei respective, i nu a valorii ei, deoarece, nefiind precedat de semnul $, interpretorul nu l distinge de un cuvnt obinuit:
define(CONSTANTA_MEA, 45); ... echo CONSTANTA_MEA; // afiseaza 45 echo CONSTANTA_MEA; // afiseaza CONSTANTA_MEA
ncercarea de a reiniializa o constant conduce la apariia unei notificri, i valoarea constantei nu este modificat:
<?php define("VARSTA_MEA", 45); echo "Am ".VARSTA_MEA." ani <br/>"; define("VARSTA_MEA", 48); echo "Am ".VARSTA_MEA." ani <br/>"; ?>
afieaz:
Am 45 ani Notice: Constant VARSTA_MEA already defined in ... Am 45 ani
Nefiind modificabile, constantele nu pot fi ascunse i sunt vizibile din ntreg programul (dar nu nainte de secvena n care au fost definite):
<?php echo "Am ".VARSTA_MEA." ani <br/>"; define("VARSTA_MEA", 45); ?>
afieaz:
Am 45 ani Notice: Constant VARSTA_MEA already defined in ... Am 45 ani Notice: Use of undefined constant VARSTA_MEA - assumed 'VARSTA_MEA' in ... Am VARSTA_MEA ani
Constantele nu pot fi distruse pe timpul execuiei programului. REZUMAT: 1. Noiunea de variabil este una universal apare i are acelai neles n toate limbajele de programare. 2. O constant este o variabil a crei valoare nu se poate modifica n timpul execuiei unui program. 3. Pentru a denumi variantele, respectiv constantele, diferitele limbaje de programare folosesc convenii diferite.
Pag. 11
Exerciii: 1. Pentru fiecare dintre cuvintele de mai jos, precizai dac poate fi sau nu numele unei variabile n PHP. n caz negativ, indicai convenia care a fost nclcat. Fiecare cuvnt este scris pe un singur rnd
$$$ VariabilaMea $VariabilaMea $_ O variabil $O variabil $O_variabil $Fisier-primar $a333 $3a $_a35_$_28
2. Cercetai de modul n care se realizeaz toate conversiile ntre tipurile ntreg, boolean, real i string. Realizai un program demonstrativ. 3. Care este rezultatul efecturii urmtoarei secvene de instruciuni:
<?php $var1 = 065; $var2 = 0xf9; $var3 = 3e2; echo "$var1 $var2 $var3"; ?>
Pag. 12