Operatori PHP
Interpretorul PHP permite folosirea a nouă tipuri diferite de operatori. Aceştia operează asupra unor expresii (una, doua sau trei) şi furnizează ca rezultat o altă expresie (rezultatul operaţiei corespunzătoare).
Operatori aritmetici:
Toţi operatorii aritmetici operează asupra a două expresii (operanzi). Există cinci astfel de operatori:
- adunare ('+');
- scădere ('-');
- împărţire ('/');
- rest ('%').
Aceste operaţii se aplică asupra unor valori care reprezintă tipuri numerice. Dacă unul dintre operanzi nu are tip numeric, atunci el va fi convertit automat la o valoare întreagă. Dacă cel puţin unul dintre operanzi (după efectuarea eventualelor conversii necesare) este un număr real, atunci rezultatul operaţiei va fi tot un număr real, cu excepţia operatorului rest; rezultatul operaţiei de determinare a restului este întotdeauna un număr întreg. Dacă ambii operanzi sunt numere întregi, atunci rezultatul va fi un număr întreg, cu excepţia împărţirii al cărei rezultat este întotdeauna un număr real. Dacă operatorul rest este aplicat asupra unor numere reale, atunci rezultatul este un număr întreg. Nu este permisă împărţirea la valoarea 0. Dacă al doilea operand asupra căruia se aplică unul dintre operatorii '/' sau '%' are valoarea 0, va fi semnalată o eroare.
Interpretorul PHP pune la dispoziţie mai mulţi operatori care pot fi folosiţi pentru compararea a două valori. Expresiile în care apar astfel de operatori au ca rezultat valori logice (true sau false).
Cel mai des întâlnit operator este cel de atribuire, definit prin semnul =
Dacă scriem $x = 1 nu înseamnă că $x este egal cu 1 ci că i s-a acordat valoarea 1. Dacă scriem $rezultat = $x + $y nu înseamnă că $rezultat este egal cu suma celor două, ci că i-am atribuit (acordat) valoarea sumei celor două.
Operatorul de egalitate este == şi se foloseşte cel mai des în propoziţii condiţionale, pentru a testa egalitatea. Opusul său, !=, este operatorul de inegalitate şi se foloseşte în acelaşi scop. Operatorul de egalitate se foloseşte pentru a compara egalitatea a două valori. Pentru a vă lămuri cum stă treaba cu egalitatea şi atribuirea, testaţi următorul cod:
Cod:
<?php
$x = 1;
$y = 7;
if ($x == $y)
{
print "$x este egal cu $y";
}
if ($x != $y)
{
print "$x este diferit de $y";
}
?>Alţi operatori folosiţi pentru compararea valorilor variabilelor sunt:
'>' mai mare
'>=' mai mare sau egal
'<' mai mic
'<=' mai mic sau egal
Exemplu:
Cod:
<?php
$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 dacă cele două expresii au aceeaşi valoare;
'===' - rezultatul este true dacă cele două expresii au aceeaşi valoare şi au acelaşi tip;
'!=' sau '<>' - rezultatul este true dacă cele două expresii au valori diferite;
'!==' - rezultatul este true dacă cele două expresii au valori diferite sau au tipuri diferite;
'<' - rezultatul este true dacă valoarea primei expresii este mai mică decât valoarea celei de-a doua expresii;
'>' - rezultatul este true dacă valoarea primei expresii este mai mare decât valoarea celei de-a doua expresii;
'<=' - rezultatul este true dacă valoarea primei expresii este mai mică sau egală cu valoarea celei de-a doua expresii;
'>=' - rezultatul este true dacă valoarea primei expresii este mai mare sau egală cu valoarea celei de-a doua expresii.
Pe lângă acestea există şi operatorul condiţional '?' care are forma expresie1?expresie2:expresie3 şi are ca rezultat valoarea expresiei expresie2 dacă valoarea expresiei expresie1 este true (eventual după conversia la tipul boolean) sau valoarea expresiei expresie3 în caz contrar.
Operatori pentru şiruri de caractere:
Operatorii pentru stringuri sunt '.' (punct) pentru concaternare şi '.=' (punct şi egal) pentru atribuirea concaternării. Aceşti operatori sunt folosiţi pentru a uni stringuri, în felul următor:
Cod:
<?php
// 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 "Am scris 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 biţi şi operatori logici:
Interpretorul PHP pune la dispoziţie şase operatori care operează asupra biţilor unui număr întreg sau ai unui şir de caractere. Aceştia sunt:
- conjuncţie ('&') - SI (AND);
- disjuncţie ('|') - SAU (OR);
- disjuncţie exclusivă ('^') - SAU exclusiv (XOR);
- negaţie ('~') - NU (NOT);
- deplasare la stânga ('<<');
- deplasare la dreapta ('>>').
Operatorii logici vă vor veni la îndemână în execuţia scriptului atunci când aveţi nevoie să lucraţi cu valori de adevăr. Să presupunem că la intrarea în secţiunea de administrare avem un formular care cere numele şi parola de acces în secţiune. Pentru construirea expresiilor logice operanzii trebuie să aibă tipul boolean; dacă operatorii au alt tip, valoarea este convertită la o valoare booleană. Scriptul PHP ar putea verifica aceste informaţii pentru a autoriza accesul în secţiune folosind operatorii logici astfel:
- operatorul 'xor' (SAU exclusiv)
Expresia în care apare operatorul 'xor' va avea valoarea true dacă exact unul dintre operanzi are valoarea true
- operatorul '!' (NOT)
if (!parola_e_buna) ... parola nu este bună, accesul este interzis
if (!parola_nu_e_buna) ... parola e bună, accesul este permis
Operatorul '!' returneaza TRUE dacă valoarea iniţială de adevăr e FALSE şi FALSE dacă valoarea iniţială este TRUE.
- operatorul '||' (OR)
if (numele_este_valid) || parola_este_buna) ...
verifică dacă numele sau parola sunt valide şi dacă oricare dintre ele este, returnează valoarea de adevăr TRUE. În acest exemplu de pseudocod dacă numele ar fi valid dar parola nu, i-am acorda utilizatorului acces mai departe, ceea ce nu este de dorit. Trebuie să fim siguri că şi numele şi parola sunt valide. Operatorul '||' returnează TRUE dacă oricare din valorile verificate e TRUE. Returnează FALSE doar dacă amândouă sunt FALSE.
- operatorul '&&' (AND)
if (numele_este_valid && parola_este_buna) ...
dacă atât numele cât şi parola sunt valide putem acorda utilizatorului acces în secţiunea de administrare. Operatorul '&&' returnează TRUE doar dacă ambele valori verificate sunt TRUE. El returnează FALSE dacă oricare dintre ele este FALSE (sau dacă amândouă sunt FALSE).
Operatori de atribuire:
Primul operand asupra căruia este aplicat un astfel de operator de atribuire trebuie să fie o variabilă, iar al doilea poate fi o expresie.
| Operaţia | Varianta scurtă | Varianta standard |
| adunare ('+=') | $a += 2 | $a = $a + 2 |
| scădere ('-=') | $a -= 2 | $a = $a - 2 |
| înmulţire ('*=') | $a *= 2 | $a = $a * 2 |
| împărţire ('/=') | $a /= 2 | $a = $a / 2 |
| rest ('%=') | $a %= 2 | $a = $a % 2 |
| conjuncţie ('&=') | $a &= 2 | $a = $a & 2 |
| disjuncţie ('|=') | $a |= 2 | $a = $a | 2 |
| disjuncţie exclusivă ('^=') | $a ^= 2 | $a = $a ^ 2 |
| deplasare la stânga ('<<=') | $a <<= 2 | $a = $a << 2 |
| deplasare la dreapta ('>>=') | $a >>= 2 | $a = $a >> 2 |
| concaternare ('.=') | $a .= "2" | $a = $a . "2" |
Exemplu:
Cod:
<?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>";
?>Rezultatul codului de mai sus este:
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 şi decrementare:
(++)are ca efect creşterea cu 1 a valorii unei variabile, iar cel de decrementare (--) are ca efect scăderea cu 1 a valorii variabilei. Tipul variabilei poate fi întreg sau real. Dacă operatorul precede variabila, atunci rezultatul expresiei este valoarea obţinută după incrementare sau decrementare. Dacă variabila precede operatorul, atunci rezultatul expresiei este valoarea variabilei înaintea incrementării sau decrementării. Cu alte cuvinte, dacă operatorul precede variabila, atunci valoarea variabilei este mai întâi modificată şi apoi utilizată, iar dacă variabila precede operatorul, atunci valoarea ei este mai întâi utilizată şi apoi modificată.
Aceşti operatori pot fi utilizaţi şi pentru variabile care conţin şiruri de caractere. Operatorul de incrementare duce la creşterea cu 1 a codului ASCII a ultimului caracter din şir dacă acesta este o literă sau cifră. În cazul în care litera este 'z', respectiv 'Z', sau cifra este '9', atunci ea devine 'a', respectiv 'A', sau cifra '0' şi se încearcă incrementarea penultimului caracter. Dacă aceasta este tot '9', 'z' sau 'Z' se aplică acelaşi procedeu şi se trece la antepenultimul caracter. Procedeul continuă până în momentul în care se ajunge la un caracter care nu este '9', 'z' sau 'Z' sau se ajunge la începutul şirului. În acest ultim caz, la începutul şirului se adaugă caracterul '1', 'a' sau 'A'. Incrementarea nu are nici un efect pentru caracterele care nu sunt cifre sau litere.
Decrementarea şirurilor de caractere nu are nici un efect, valorile variabilelor rămânând nemodificate. Există o singură excepţie şi anume şirurile care reprezintă numere întregi sau reale. Acestea sunt incrementate sau decrementate potrivit regulilor pentru valorile numerice.
Exemplu:
Cod:
<?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>";
?>Rezultatul codului de mai sus este:
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.
Aceşti operatori sunt utili de exemplu pentru monitorizarea unui download, dacă doriţi să ştiţi de câte ori a fost descărcat un fişier dintr-o anumită pagină. La fiecare accesare a fişierului, scriptul incrementează cu 1 şi afişează valoarea. (scriptul îl gândiţi voi, doar nu vreţi totul la tavă)
Operatori pentru controlul erorilor:
În PHP există un operator (@) care permite ignorarea erorilor. Dacă este aplicat asupra unei expresii care ar duce la afişarea unui mesaj de eroare, atunci mesajul respectiv nu va fi afişat.
Operatori de execuţie:
Interpretorul PHP permite executarea unor comenzi sistem prin intermediul operatorului (` `) . Comanda respectivă este cuprinsă între apostroafele inverse (tasta de lângă 1 deasupra tastei tab), iar rezultatul acestei comenzi este un şir de caractere care reprezintă şi rezultatul expresiei.
Urmatorul script PHP determină execuţia pe server a comenzii help /? şi afişarea rezultatului în fereastra programului de navigare.
Cod:
<?php
echo "<PRE>".`help /?`."</PRE>";
?>
Atenţie!
Pe unele configuraţii de server nu se permite executarea de comenzi prin intermediul PHP (ca măsură de siguranţă, altfel oricine ar putea da un format sau reboot la server prin intermediul unui script PHP).
Operatori pentru vectori:
Singurul operator care poate fi aplicat asupra vectorilor este cel de concaternare (+) Rezultatul concatenării a doi vectori este un vector care conţine elementele din cei doi vectori. Dacă cei doi vectori conţin elemente cu aceeaşi cheie, atunci este păstrat doar elementul din vectorul care reprezintă primul operand.
Exemplu:
Cod:
<?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]";
?>Rezultatul codului de mai sus este:
100 2 300 4 5 7
Ordinea operaţiilor:
Evident, o expresie poate conţine mai mulţi operatori, din categorii diferite. Pentru a indica ordinea în care trebuie efectuate calculele, trebuie stabilită o ordine a operaţiilor. Pentru aceasta a fost definită precedenta şi asociativitatea operaţiilor.
Valoarea expresiilor corespunzătoare operatorilor cu precedenta mai mare va fi calculată înaintea valorilor expresiilor cu o precedentă mai mică. De exemplu, pentru expresia 1 + 2 * 3 va fi efectuată mai întâi înmulţirea 2 * 3, datorită faptului că operatorul '*' are precedenta mai mare decât cea a operatorului '+'.
Dacă o expresie sau o subexpresie conţine numai operatori cu aceeaşi precedentă, atunci operaţiile se vor efectua în ordinea determinată de asociativitatea acestor operatori care poate fi de la dreapta la stânga sau de la stânga la dreapta. Toţi operatorii cu aceeaşi precedentă au acelaşi tip de asociativitate.
Evident, pentru a modifica ordinea implicită de efectuare a operaţiilor pot fi folosite paranteze pentru a indica faptul că o anumită operaţie trebuie efectuată înaintea altora, chiar dacă acestea din urmă au o precedentă mai mare.
Trebuie observat faptul că, datorită asociativităţii de la dreapta spre stânga a operatorilor de atribuire, expresiile de tipul $a = $b = 1 sunt valide. Mai întâi se va efectua atribuirea $b = 1; variabila $b va primi valoarea 1 şi, datorită faptului că rezultatul unei operaţii de atribuire este valoarea atribuită variabilei care reprezintă primul operand, în continuare se va efectua atribuirea $a = 1, deci şi variabila $a va primi tot valoarea 1. Tabelul de mai jos conţine o listă cu majoritatea operatorilor din PHP. Liniile tabelului indică precedenta, în sensul că un operator are aceeaşi precedentă cu operatorii de pe linie în care apare şi o precedentă mai mare decât oricare operator aflat pe o linie anterioară. În acest tabel se observă faptul că, deşi operatorii '&&' şi 'and', respectiv '||' şi 'or' realizează aceeaşi operaţie, ei au precedente diferite, deci nu sunt echivalenţi din toate punctele de vedere.
Tip asociativitate | Tip | Operanzi |
| de la stânga la dreapta | unar | . (selectare) |
| de la stânga la dreapta | binar | or |
| de la stânga la dreapta | binar | xor |
| de la stânga la dreapta | binar | and |
| de la stânga la dreapta | binar | print |
| de la stânga la dreapta | binar | = += -= *= /= .= %= &= |= ^= ~= <<= >>= |
| de la stânga la dreapta | ternar | ? : |
| de la stânga la dreapta | binar | || |
| de la stânga la dreapta | binar | && |
| de la stânga la dreapta | binar | | |
| de la stânga la dreapta | binar | ^ |
| de la stânga la dreapta | binar | & |
| fără asociativitate | binar | == != === !== |
| fără asociativitate | binar | < <= > >= |
| de la stânga la dreapta | binar | << >> |
| de la stânga la dreapta | binar | + - . (concaternare) |
| de la stânga la dreapta | binar | * / % |
| de la stânga la dreapta | unar | ! ~ ++ -- (int) (float) (string) (array) (object) @ |
| de la stânga la dreapta | unar | [ |
| fără asociativitate | unar | new |
În tabel este prezentat şi numărul expresiilor asupra cărora acţionează un operand. Operatorii unari acţionează asupra unei singure expresii, cei binari asupra a două expresii şi singurul operator ternar asupra a trei expresii.
În continuare sunt câţiva operatori care execută operaţii utile:
- abs(x) - returnează valoarea absolută a lui x;
- ceil(x) - returnează valoarea x, rotunjită la întregul imediat superior;
- floor(x) - returnează valoarea x, rotunjită la întregul imediat inferior;
- max(x, y, ...) - returnează valoarea maximă a unui set de valori;
- min(x, y, ...) - returnează valoarea minimă a unui set de valori;
- pow(x, n) - returnează numărul x, ridicat la puterea specificată n;
- strftime(f) - returnează data curentă, formatată conform conţinutului parametrului f;
- sqrt(x) - returnează rădăcina pătrată a lui x
Mai jos sunt câteva exemple:
$lungime = sqrt($arie);
Acest exemplu calculează lungimea laturilor unui pătrat, dacă este cunoscută aria pătratului. În continuare este prezentat modul de utilizare al funcţiei max, care preia mai multe argumente:
$punctaj_castigator = max($punctaj1, $punctaj2, $punctaj3);
Un alt exemplu calculează aria unui cerc de rază dată:
Cod:
<?php
$raza = 2.0;
$pi = 3.14159;
$arie = $pi * $raza * $raza;
echo "raza = ";
echo $raza;
echo "<br>arie = ";
echo $arie;
?>Exista 5 articole asemanatoare, apasati aici pentru lista.
- Gestionati permisiunile utilizand operatii pe biti - Partea 1
- Notiuni fundamentale despre bazele de date si SQL (2)
- Crearea Foilor de Stil
- Operatori JavaScript
- Sintaxa Java Script
++ -- au asociativitatea de la stânga la dreapta(i-am testat eu), intrebarea e de ce pe php.net este
specificat faptul ca n-au asociativitate?
http://www.php.net/manual/en/language.operators.precedence.php





