Programare pentru web (III)

by donpedro

În numărul trecut al revistei am încercat să vă familiarizez cu câteva noţiui de bază ale PHP-ului, vizând în principal sintaxa. Considerând că exemplele prezentate v-au fost de ajutor ca un punct de plecare în studiul individual, voi merge astăzi mai departe încercând să vă prezint câte ceva despre structurile de control.

În numărul trecut am folosit sintagma $hello = ‘Hello world’; şi am spus că $hello este un şir de caractere sau, pe scurt, un string. Putem aprecia astfel că şirul conţine pe rând literele H, e, l, l … etc. şi chiar mai mult, că în prima poziţie a şirului se află litera H, în a doua e, în a treia şi a patra l şi aşa mai departe. Să încercăm să scriem un cod care afişează Hello World, scris de aşa natură încât fiecare literă apare pe un singur rând.
O remarcă se impune în acest punct. Veţi observa că primul element din şir este cel de pe poziţia 0 şi nu 1 cum aţi fi fost tentat să credeţi. Similar pentru un şir de 11 caractere, ultimul va ocupa poziţia 10. Altfel apelarea este destul de simplă şi intuitivă.
Codul de mai sus are însă mari neajunsuri. Unul este dimensiunea codului. Pentru un şir cu 100 de caractere codul va avea peste o sută de linii aproape identice. Un alt neajuns este că modificarea unui astfel de cod poate presupune serioase adăugiri sau ştergeri în funcţie de numărul de caractere al şirului ce se doreşte a fi afişat. Pentru a elimina aceste neajunsuri este necesar un cod care să poată afişa pe ecran orice şir, indiferent de lungimea sa. Un astfel de cod arată după cum urmează:

Veţi observa că acest cod nu este doar mai util ci şi mult mai scurt. Ca noutăţi veţi observa funcţia strlen() şi instrucţiunea for.
– funcţia strlen primeşte ca argument un string şi întoarce numărul de caractere al acestuia
[Ex:$nr_de_caractere_in_string=strien($string)]
NOTA: strlen va întoarce numărul de caractere al şirului, ceea ce înseamnă, după cum am spus şi mai devreme că ultimul caracter al şirului se află pe poziţia strlen($string) – 1.
– instrucţiunea for are ca rol repetarea unei instrucţiuni sau al unui set de instrucţiuni atât timp cât o condiţie este adevărată.

NOTE:
instrucţiune1 se va executa o singură dată înainte de a se pune prima dată condiţia;
instrucţiune2 se va executa de fiecare dată când condiţia este îndeplinită, după ce se execută setul de instrucţiuni 3.

În cazul nostru am ales o variabilă ($i) în care să memorăm, pe rând, toate poziţiile din şirul $hello pe care se găsesc caractere. Astfel, această variabilă va avea iniţial valoarea 0. Cât timp aceasta este mai mică decât numărul de caractere al stringului afişez poziţia $i. $i creşte apoi cu o unitate ($i++) şi condiţia este pusă din nou. Aceşti paşi vor fi repetaţi cât timp condiţia este adevărată. După cum probabil v-aţi dat seama, în cazul în care şirul nu conţine nici un caracter condiţia nu va fi îndeplinită nici măcar odată şi nu va fi afişat nimic.
Acum să mergem mai departe. Pe lângă şiruri de caractere, acest mod de apelare se poate folosi şi la şiruri de numere sau orice altă informaţie. Aceste şiruri poartă denumirea de vectori (array în limba engleză). Pentru uşurinţă, vă puteţi imagina aceşti vectori exact ca în algebră, adică drept o matrice cu un singur rând şi mai multe coloane. Putem avea aşadar vectorul valorilor dolarului în ultimele trei zile. Pentru a atribui aceste valori putem alege fie:
$usd = array(33500,33457,33512);
fie:
$usd[0] = 33500;
$usd[1] = 33457;
$usd[2] = 33512;
Presupunând că acest vector memorează valorile pentru ultimii 3 ani la rând, veţi fi de acord cu mine că este dificil să aflaţi exact poziţia valorii dintr-o dată anume. Din acest motiv, în PHP este permisă apelarea elementelor unui vector nu doar după poziţie ci şi după o etichetă pe care dumneavoastră o alegeţi. Este corect aşadar un cod de genul:echo $usd[“21_10_2002”];
Mă voi opri aici, pentru moment, cu studiul vectorilor şi al stringurilor. V-am promis însă că în fiecare capitol vă voi explica şi un cod util pentru a fi inclus în site-ul dumneavoastră. Astăzi am ales un script care vă poate spune dacă utilizatorul foloseşte Internet Explorer sau nu.
Înainte de a trece la codul propriu-zis trebuie însă să vă spun că PHP-ul iniţializa automat un set întreg de variabile predefinite. Una dintre aceste variabile este $_SERVER (majusculele sunt obligatorii), un vector ce memorează diverse informaţii de la web server. conţine informaţiile referitoare la browser-ul vizitatorului.

Linia de cod:echo $_SERVER[“HTTP_USER_AGENT”];
va afişa:
Mozijavascript:void(0)lla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
în cazul în care detectează Internet Explorer 5.01 rulând pe o platformă Windows2000.

Şi acum să trecem la codul promis:

Acest cod, relativ simplu, aduce ca noutate instrucţiunea if.
If are ca scop analizarea unei condiţii şi luarea unei decizii în funcţie de adevărul sau falsitatea condiţiei.

Astfel în cazul în care condiţie este adevarată se va executa setul 1, iar dacă este falsă, setul 2.
NOTĂ: atât timp cât nu ne interesează cazul în care condiţia este falsă, instrucţiunea else poate să lipsească.
Scriptul de mai sus foloseşte drept condiţie funcţia strstr(). Aceasta decide dacă un şir de caractere este sau nu inclus în altul; primeşte ca parametrii şirul mamă (în cazul nostru şi şirul a cărui includere se doreşte a fi verificată (în cazul de mai sus MSIE). Funcţia va întoarce valoarea “True” (adevarat) sau “False” (fals) după caz.
Vorbeam la început de instrucţiuni de control. If şi for sunt unele dintre ele, existând însă şi while (instrucţiune repetitivă ca şi for) sau switch (bloc de decizie ca şi if, ce poate alege între mai mult de două posibilităţi). Pe acestea le voi prezenta pe parcurs, manualul fiindu-vă de ajutor în familiarizarea cu ele.
Închei aici, îndemnându-vă ca de obicei să exersaţi scriind cod. Veţi descoperi foarte repede că, atât timp cât aveţi manualul la îndemână, PHP-ul este un limbaj uşor de înţeles şi folosit. Aştept, deasemenea sugestiile şi întrebările dumneavoastră prin email, până peste două săptămâni, când vom vedea cum se creează şi se foloseşte un formular.

bogdan.nita@ealliance.ro

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