Operatori PHP
Interpretorul PHP permite folosirea a noua tipuri diferite de operatori. Acestia opereaza asupra unor expresii (una, doua sau trei) si furnizeaza ca rezultat o alta expresie (rezultatul operatiei corespunzatoare).
Operatori aritmetici:
Toti operatorii aritmetici opereaza asupra a doua expresii (operanzi). Exista cinci astfel de operatori:
- adunare ('+');
- scadere ('-');
- inmultire ('*');
- impartire ('/');
- rest ('%').
Aceste operatii se aplica asupra unor valori care reprezinta tipuri numerice. Daca unul dintre operanzi nu are tip numeric, atunci el va fi convertit automat la o valoare intreaga. Daca cel putin unul dintre operanzi (dupa efectuarea eventualelor conversii necesare) este un numar real, atunci rezultatul operatiei va fi tot un numar real, cu exceptia operatorului rest; rezultatul operatiei de determinare a restului este intotdeauna un numar intreg. Daca ambii operanzi sunt numere intregi, atunci rezultatul va fi un numar intreg, cu exceptia impartirii al carei rezultat este intotdeauna un numar real. Daca operatorul rest este aplicat asupra unor numere reale, atunci rezultatul este un numar intreg. Nu este permisa impartirea la valoarea 0. Daca al doilea operand asupra caruia se aplica unul dintre operatorii '/' sau '%' are valoarea 0, va fi semnalata o eroare.
Operatori de comparare:
Interpretorul PHP pune la dispozitie mai multi operatori care pot fi folositi pentru compararea a doua valori. Expresiile in care apar astfel de operatori au ca rezultat valori logice (true sau false).
Cel mai des intalnit operator este cel de atribuire, definit prin semnul =. Daca scriem $x = 1 nu inseamna ca $x este egal cu 1 ci ca i s-a acordat valoarea 1. Daca scriem $rezultat = $x + $y nu inseamna ca $rezultat este egal cu suma celor doua, ci ca i-am atribuit (acordat) valoarea sumei celor doua.
Operatorul de egalitate este == si se foloseste cel mai des in propozitii conditionale, pentru a testa egalitatea. Opusul sau, !=, este operatorul de indegalitate si se foloseste in acelasi scop. Operatorul de egalitate se foloseste pentru a compara egalitatea a doua valori. Pentru a va lamuri cum sta treaba cu egalitatea si atribuirea, testati urmatorul cod:
$x = 1; $y = 7;
if ($x == $y) {
print "$x este egal cu $y";
}
if ($x != $y) {
print "$x este diferit de $y";
}
Alti operatori folositi pentru compararea valorilor variabilelor sunt:
> mai mare
>= mai mare sau egal
< mai mic
<= mai mic sau egal
Exemplu:
$x = 5; $y = 4;
if ($x > $y) {
print "$x este mai mare ca $y";
}
if ($x <= $y) {
print "$x este mai mic sau egal cu $y";
}
'==' - rezultatul este true daca cele doua expresii au aceeasi valoare;
'===' - rezultatul este true daca cele doua expresii au aceeasi valoare si au acelasi tip;
'!=' sau '<>' - rezultatul este true daca cele doua expresii au valori diferite;
'!==' - rezultatul este true daca cele doua expresii au valori diferite sau au tipuri diferite;
'<' - rezultatul este true daca valoarea primei expresii este mai mica decat valoarea celei de-a doua expresii;
'>' - rezultatul este true daca valoarea primei expresii este mai mare decat valoarea celei de-a doua expresii;
'<=' - rezultatul este true daca valoarea primei expresii este mai mica sau egala cu valoarea celei de-a doua expresii;
'>=' - rezultatul este true daca valoarea primei expresii este mai mare sau egala cu valoarea celei de-a doua expresii.
Pe langa acestia exista si operatorul conditional '?' care are forma expresie1?expresie2:expresie3 si are ca rezultat valoarea expresiei expresie2 daca valoarea expresiei expresie1 este true (eventual dupa conversia la tipul boolean) sau valoarea expresiei expresie3 in caz contrar.
Operatori pentru siruri de caractere:
Operatorii pentru stringuri sunt . pentru concaternare si .= pentru atribuirea concaternarii. Acesti operatori sunt folositi pentru a uni stringuri, in felul urmator:
// concaternarea stringurilor
$test = 'Am scris un '.'text'.'oarecare';
print $test;
// pe ecran va fi afisat "Am scris un text oarecare"
// concaternarea stringurilor cu variabile
$nr = 5;
print 'Am scris numarul '.$nr.' si un text '. ' oarecare';
// pe ecran va fi afisat "Amscris numarul 5 si un text oarecare"
// atribuirea concaternarii
$nr = 6;
$text = "Un text ";
$text .= "oarecare ";
$text .= "si numarul ".$nr;
print $text;
// pe ecran va fi afisat "Un text oarecare si numarul 6"
Operatori pe biti si operatori logici:
Interpretorul PHP pune la dispozitie sase operatori care opereaza asupra bitilor unui numar intreg sau ai unui sir de caractere. Acestia sunt:
- conjunctie ('&') - SI (AND);
- disjunctie ('|') - SAU (OR);
- disjunctie exclusiva ('^') - SAU exclusiv (XOR);
- negatie ('~') - NU (NOT);
- deplasare la stanga ('<<');
- deplasare la dreapta ('>>').
Operatorii logici va vor veni la indemana in executia scriptului atunci cand aveti nevoie sa lucrati cu valori de adevar. Sa presupunem ca la intrarea in sectiunea de administrare avem un formular care cere numele si parola de acces in sectiune. Pentru contruirea expresiilor logice operanzii trebuie sa aiba tipul boolean; daca operatorii au alt tip, valoarea este convertita la o valoare booleana. Scriptul PHP ar putea verifica aceste informatii pentru a autoriza accesul in sectiune folosind operatorii logici astfel:
- operatorul xor (SAU exclusiv)
Expresia in care apare operatorul 'xor' va avea valoarea true daca exact unul dintre operanzi are valuarea true
- operatorul ! (NOT)
if (!parola_e_buna) ... parola nu este buna, accesul este interzis
if (!parola_nu_e_buna) ... parola a buna, accesul este permis
Operatorul ! returneaza TRUE daca valoarea initiala de adevar e FALSE si FALSE daca valoarea initiala este TRUE.
- operatorul || (OR)
if (numele_este_valid) || parola este buna) ...
verifica daca numele sau parola sunt valide si daca oricare dintre ele este, returneaza valoarea de adevar TRUE. In acest exemplu de pseudocod daca numele ar fi valid dar parola nu, i-am acorda utilizatorului acces mai departe, ceea ce nu este de dorit. Trebuie sa fim siguri ca si numele si parola sunt valide. Operatorul || returneaza TRUE daca oricare din valorile verificate e TRUE. Returneaza FALSE doar daca amandoua sunt FALSE.
- operatorul && (AND)
if (numele_este_valid && parola_este_buna) ...
daca atat numele catsi parola sunt valide putem acorda utilizatorului acces in sectiunea de administrare. Operatorul && returneaza TRUE doar daca ambele valori verificate sunt TRUE. El returneaza FALSE daca oricare dintre ele este FALSE (sau daca amandoua sunt FALSE).
Operatori de atribuire:
Primul operand asupra caruia este aplicat un astfel de operator de atribuire trebuie sa fie o variabila, iar al doilea poate fi o expresie.
- adunare ('+='): $a += 2 <=> $a = $a + 2;
- scadere ('-='): $a -= 2 <=> $a = $a - 2;
- inmultire ('*='): $a *= 2 <=> $a = $a * 2;
- impartire ('/='): $a /= 2 <=> $a = $a / 2;
- rest ('%='): $a %= 2 <=> $a = $a % 2;
- conjunctie ('&='): $a &= 2 <=> $a = $a & 2;
- disjunctie ('|='): $a |= 2 <=> $a = $a | 2;
- disjunctie exclusiva ('^='): $a ^= 2 <=> $a = $a ^ 2;
- deplasare la stanga ('<<='): $a <<= 2 <=> $a = $a << 2;
- deplasare la dreapta ('>>='): $a >>= 2 <=> $a = $a >> 2;
- concaternare ('.='): $a .= "2" <=> $a = $a . "2".
Exemplu | Rezultat |
<?php $b = 2; $a = 1; echo "<TT>$a += $b = "; echo $a += $b; $b = 2; $a = 1; echo "<br>$a -= $b = "; echo $a -= $b; $b = 2; $a = 1; echo "<br>$a *= $b = "; echo $a *= $b; $b = 2; $a = 1; echo "<br>$a /= $b = "; echo $a /= $b; $b = 2; $a = 1; echo "<br>$a %= $b = "; echo $a %= $b; $b = 2; $a = 1; echo "<br>$a &= $b = "; echo $a &= $b; $b = 2; $a = 1; echo "<br>$a |= $b = "; echo $a |= $b; $b = 2; $a = 1; echo "<br>$a ^= $b = "; echo $a ^= $b; $b = 2; $a = 1; echo "<br>$a <<= $b = "; echo $a <<= $b; $b = 2; $a = 1; echo "<br>$a >>= $b = "; echo $a >>= $b; $b = 2; $a = 1; echo "<br>$a .= $b = "; echo $a .= $b; echo "</TT>"; ?> | 1 += 2 = 3 1 -= 2 = -1 1 *= 2 = 2 1 /= 2 = 0.5 1 %= 2 = 1 1 &= 2 = 0 1 |= 2 = 3 1 ^= 2 = 3 1 <<= 2 = 4 1 >>= 2 = 0 1 .= 2 = 12 |
Operatori de incrementare si decrementare:
Operatorul de incrementare ('++') are ca efect cresterea cu 1 a valorii unei variabile, iar cel de decrementare ('--') are ca efect scaderea cu 1 a valorii variabilei. Tipul variabilei poate fi intreg sau real. Daca operatorul precede variabila, atunci rezultatul expresiei este valoarea obtinuta dupa incrementare sau decrementare. Daca variabila precede operatorul, atunci rezultatul expresiei este valoarea variabilei inaintea incrementarii sau decrementarii. Cu alte cuvinte, daca operatorul precede variabila, atunci valoarea variabilei este mai intai modificata si apoi utilizata, iar daca variabila precede operatorul, atunci valoarea ei este mai intai utilizata si apoi modificata. Acesti operatori pot fi utilizati si pentru variabile care contin siruri de caractere. Operatorul de incrementare duce la cresterea cu 1 a codului ASCII a ultimului caracter din sir daca acesta este o litera sau cifra. In cazul in care litera este 'z', respectiv 'Z', sau cifra este '9', atunci ea devine 'a', respectiv 'A', sau cifra '0' si se incearca incrementarea penultimului caracter. Daca aceasta este tot '9', 'z' sau 'Z' se aplica acelasi procedeu si se trece la antepenultimul caracter. Procedeul continua pana in momentul in care se ajunge la un caracter care nu este '9', 'z' sau 'Z' sau se ajunge la inceputul sirului. In acest ultim caz, la inceputul sirului se adauga caracterul '1', 'a' sau 'A'. Incrementarea nu are nici un efect pentru caracterele care nu sunt cifre sau litere.
Decrementarea sirurilor de caractere nu are nici un efect, valorile variabilelor ramanand nemodificate. Exista o singura exceptie si anume sirurile care reprezinta numere intregi sau reale. Acestea sunt incrementate sau decrementate potrivit regulilor pentru valorile numerice.
Exemplu | Rezultat |
<?php $a = 7; echo "<tt>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a++</tt><i> este </i><tt>"; echo $a++; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>++a</tt><i> este </i><tt>"; echo ++$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a--</tt><i> este </i><tt>"; echo $a--; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>--a</tt><i> este </i><tt>"; echo --$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; $a = 7.5; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a++</tt><i> este </i><tt>"; echo $a++; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>++a</tt><i> este </i><tt>"; echo ++$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a--</tt><i> este </i><tt>"; echo $a--; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>--a</tt><i> este </i><tt>"; echo --$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; $a = "PHP"; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a++</tt><i> este </i><tt>"; echo $a++; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>++a</tt><i> este </i><tt>"; echo ++$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a--</tt><i> este </i><tt>"; echo $a--; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>--a</tt><i> este </i><tt>"; echo --$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><tt>$a."; echo "</tt>"; ?> | a = 7: Rezultatul operatiei a++ este 7. Noua valoare a variabilei a este 8. a = 8: Rezultatul operatiei ++a este 9. Noua valoare a variabilei a este 9. a = 9: Rezultatul operatiei a-- este 9. Noua valoare a variabilei a este 8. a = 8: Rezultatul operatiei --a este 7. Noua valoare a variabilei a este 7. a = 7.5: Rezultatul operatiei a++ este 7.5. Noua valoare a variabilei a este 8.5. a = 8.5: Rezultatul operatiei ++a este 9.5. Noua valoare a variabilei a este 9.5. a = 9.5: Rezultatul operatiei a-- este 9.5. Noua valoare a variabilei a este 8.5. a = 8.5: Rezultatul operatiei --a este 7.5. Noua valoare a variabilei a este 7.5. a = PHP: Rezultatul operatiei a++ este PHP. Noua valoare a variabilei a este PHQ. a = PHQ: Rezultatul operatiei ++a este PHR. Noua valoare a variabilei a este PHR. a = PHR: Rezultatul operatiei a-- este PHR. Noua valoare a variabilei a este PHR. a = PHR: Rezultatul operatiei --a este PHR. Noua valoare a variabilei a este PHR. |
Acesti operatori sunt utili de exemplu pentru monitorizarea unui download, daca doriti sa stiti de cate ori a fost descarcat un fisier dintr-o anumita pagina. La fiecare accesare a fisierului scriptul incrementeaza cu 1 si afiseaza valoarea. (scriptul il ganditi voi, doar nu vreti totul la tava)
Operatori pentru controlul erorilor:
In PHP exista un operator ('@') care permite ignorarea erorilor. Daca este aplicat asupra unei expresii care ar duce la afisarea unui mesaj de eroare, atunci mesajul respectiv nu va fi afisat.
Operatori de executie:
Interpretorul PHP permite executarea unor comenzi sistem prin intermediul operatorului "''". Comanda respectiva este cuprinsa intre apostroafele inverse (tasta de langa 1 deasupra tastei tab), iar rezultatul acestei comenzi este un sir de caractere care reprezinta si rezultatul expresiei.
Urmatorul script PHP determina executia pe server a comenzii help /? si afisarea rezultatului in fereastra programului de navigare.
Exemplu | Rezultat |
<?php echo "<PRE>" . `help /?` . "</PRE>"; ?> | As.Ro PHP Engine: Warning: shell_exec() has been disabled for security reasons in /home/php4/articole/14_operatori.php on line 466 |
Operatori pentru vectori:
Singurul operator care poate fi aplicat asupra vectorilor este cel de concaternare ('+'). Rezultatul concaternarii a doi vectori este un vector care contine elementele din cei doi vectori. Daca cei doi vectori contin elemente cu aceeasi cheie, atunci este pastrat doar elementul din vectorul care reprezinta primul operand.
Exemplu | Rezultat |
<?php $x[2] = 2; $x[4] = 4; $x[5] = 5; $x[7] = 7; $y[1] = 100; $y[2] = 200; $y[3] = 300; $y[4] = 400; $y[5] = 500; $z = $x + $y; echo "$z[1] $z[2] $z[3] $z[4] $z[5] $z[7]"; ?> | 100 2 300 4 5 7 |
Ordinea operatiilor:
Evident, o expresie poate contine mai multi operatori, din categorii diferite. Pentru a indica ordinea in care trebuie efectuate calculele, trebuie stabilita o ordine a operatiilor. Pentru aceasta a fost definita precedenta si asociativitatea operatiilor.
Valoarea expresiilor corespunzatoare operatorilo cu precedenta mai mare va fi calculata inaintea valorilor expresiilor cu o precedenta mai mica. De exemplu, pentru expresia 1 + 2 * 3 va fi efectuata mai intai inmultirea 2 * 3, datorita faptului ca operatorul '*' are precedenta mai mare decat cea a operatorului '+'.
Daca o expresie sau o subexpresie contine numai operatori cu aceeasi precedenta, atunci operatiile se vor efectua in ordinea determinata de asociativitatea acestor operatori care poate fi de la dreapta la stanga sau de la stanga la dreapta. Toti operatorii cu aceeasi precedenta au aceeasi tip de asociativitate.
Ecident, pentru a modifica ordinea implicita de efectuare a operatiilor pot fi folosite paranteze pentru a indica faptul ca o anumita operatie trebuie efectuata inaintea altora, chiar daca acestea din urma au o precedenta mai mare.
Trebuie observat faptul ca, datorita asociativitatii de la dreapta spre stanga a operatorilor de atribuire, expresiile de tipul $a = $b = 1 sunt valide. Mai intai se va efectua atribuirea $b = 1; variabila $b va primi valoarea 1 si, datorita faptului ca rezultatul unei operatii de atribuire este valoarea atribuita variabilei care reprezinta primul operand, in continuare se va efectua atribuirea $a = 1, deci si variabila $a va primi tot valoarea 1.Tabelul de mai jos contine o lista cu majoritatea operatorilor din PHP. Liniile tabelului indica precedenta, in sensul ca un operator are aceeasi precedenta cu operatorii de pe linie in care apare si o precedenta mai mare decat oricare operator aflat pe o linie anterioara. In acest tabel se observa faptul ca, desi operatorii '&&' si 'and', respectiv '||" si "or" realizeaza aceeasi operatie, ei au precedente diferite, deci nu sunt echivalenti din toate punctele de vedere.
Tip asociativitate | Tip | Operanzi |
de la stanga la dreapta | unar | . (selectare) |
de la stanga la dreapta | binar | or |
de la stanga la dreapta | binar | xor |
de la stanga la dreapta | binar | and |
de la stanga la dreapta | binar | print |
de la stanga la dreapta | binar | = += -= *= /= .= %= &= |= ^= ~= <<= >>= |
de la stanga la dreapta | ternar | ? : |
de la stanga la dreapta | binar | || |
de la stanga la dreapta | binar | && |
de la stanga la dreapta | binar | | |
de la stanga la dreapta | binar | ^ |
de la stanga la dreapta | binar | & |
fara asociativitate | binar | == != === !== |
fara asociativitate | binar | < <= > >= |
de la stanga la dreapta | binar | << >> |
de la stanga la dreapta | binar | + - . (concaternare) |
de la stanga la dreapta | binar | * / % |
de la stanga la dreapta | unar | ! ~ ++ -- (int) (float) (string) (array) (object) @ |
de la stanga la dreapta | unar | [ |
fara asociativitate | unar | new |
Link-ul autorului:
www.tutoriale.far-php.ro
Comentarii
Voteaza acest articol!
Trimite un comentariu!