Operatori de comparare
$a == $b // egal $a === $b // identic (aceeasi valoare si acelasi tip) $a != $b // diferit $a <> $b // diferit $a !== $b // ne-identic $a < $b // strict mai mic $a <= $b // mai mic sau egal $a > $b // strict mai mare $a >= $b // mai mare sau egalExemple:
<?php $a = 4; # initializam $a cu numarul 4 $b = "4"; # initializam $b cu string-ul "4" if( $a == 4 ) print "\$a este 4"; # va afisa "$a este 4" else print "\$a nu este 4"; if( $a == $b ) print "Sunt egale"; # va afisa "Sunt egale" else print "Nu sunt egale"; if( $a === $b ) print "Sunt identice"; # va afisa "Nu sunt identice" else print "Nu sunt identice"; # Nota: deoarece $a este numar iar $b string, ele nu sunt identice if( $a > 4 ) print "\$a este mai mare decat 4"; ?>Atentie! Daca se compara un string (text) cu un numar, stringul este convertit la un numar. Exemplu:
"text" == 0 // echivalent 0 == 0, evalueaza la true
Daca se compara 2 stringuri ce contin numere, acestea sunt mai intai convertite la numerele pe care le reprezinta si apoi are loc comparatia. Astfel, 2 texte care sunt diferite ar putea fi considerate egale. Exemplu:
"1" == "01" // echivalent 1 == 1, evalueaza la true "1" == "1e0" // echivalent 1 == 1, evalueaza la trueNota: "01" si "1e0" sunt notatii matematice diferite pentru numarul 1.
Diferenta intre operatorii == si =
Operatorul == este diferit de operatorul de atribuire = si nu trebuie confundati. Dublu-egal (==) este folosit pentru comparare iar egal simplu (=) - pentru atribuirea de valori unei variabile.
# $a = 5 este o atribuire. print $a = 5; // 5 # instructiunea print afiseaza rezultatul atribuirii ( rezultatul unei atribuiri este # intotdeauna egal cu valoarea atribuita # $a == 1 este o verificare. Instructiunea afiseaza rezultatul verificarii. print $a == 1; // false
In timp ce atribuirile se pot folosi atat de sine statator ($a = 1;), cat si ca expresii in cadrul instructiunilor (print $a = 1; return $a = 1;) operatorii == sau === sunt folositi doar in cadrul instructiunilor.
# corect $a = 10; # atribuire de sine statatoare print $a = 10; # atribuire + afisarea rezultatului atribuirii # incorect - nu genereaza erori dar aceasta constructie este inutila. $a == 1; # nu se face nimic cu rezultatul comparatiei # corect print $a == 1; # se afiseaza rezultatul comparatiei print $a === '1'; # se afiseaza rezultatul comparatiei exacte if( $a == 1 ) echo 'egal'; # se face o verificare
Operatorul ternar
PHP ofera un operator care are 3 termeni. Sintaxa lui este urmatoarea:
(conditie ? adevarat : fals )
De remarcat ca adevarat, fals si conditie nu sunt instructiuni ci expresii (variabile, constante, stringuri, etc) iar operatorul returneaza o valoare si nu o variabila.
print ( 1 == 2 ? 'egal' : 'ne-egal' ); // afiseaza ne-egal
nu se poate, ca in loc de "?" si":" sa folosim pur si simplu ivrgula:print(1==2,"egal","ne-ega");?ca in c++?
Cred ca nu am explicat prea bine. Operatorul ternar (?...:) face de fapt o verificare, si in functie de rezultatul verificarii returneaza ori prima expresie de dupa conditie, ori a doua.
Exemplul meu s-ar traduce in felul urmator:
printeaza "egal" daca 1 == 2 sau "ne-egal" daca 1 != 2
Este singura modalitate de a obtine aceasta functionalitate, fara sa folosesti instructiunea "if"
Note: si C++ are un operator similar cu acelasi efect ca in PHP
Adauga un comentariu la aceasta sectiune.
Operatori de incrementare/decrementare
Incrementare inseamna cresterea valorii, de obicei cu o unitate, iar decrementarea este operatia inversa. PHP ofera (ca si C/C++) posibilitatea ca incrementarea/decrementarea sa se faca printr-un operator, fara sa fie nevoie de o instructiune separata. Spre exemplu:
$a = 1; // pentru a-l creste pe $a cu o unitate, normal am scrie: $a = $a + 1; // folosind operatorul de incrementare scriem: $a++; // sau ++$a; // pentru a afisa noua valoare, putem aplica operatorul direct din instructiunea print: print ++$a;
Dupa cum se poate observa, putem scrie $a++ si ++$a. Diferenta este ca atunci cand ++ apare inainte de variabila, PHP face mai intai incrementarea si apoi returneaza noua valoare. Cand ++ apare dupa, se returneaza valoarea actuala (ne-incrementata) si apoi se creste cu o unitate. Exemplu:
$a = 1; print $a++; // afiseaza 1 - mai intai se afiseaza valoarea curenta, dupa care $a devine 2; print $a; // afiseaza 2 - $a are valoarea 2 dupa incrementare; $a = 1 print ++$a; // afiseaza 2 - mai intai $a creste cu o unitate, apoi este afisata noua valoare print $a; // afiseaza 2 - $a are valoarea 2;
Nota: aceleasi observatii (legate de pozitie) se aplica si pentru operatorul de decrementare.
$a = 2; print $a--; // afiseaza 2 - mai intai se afiseaza valoarea curenta, dupa care $a devine 1; print $a; // afiseaza 1 - $a are valoarea 1 dupa decrementare; $a = 2 print --$a; // afiseaza 1 - mai intai $a scade cu o unitate, apoi este afisata noua valoare print $a; // afiseaza 1 - $a are valoarea 1;
Operatori de atribuire
$a = 1; // atribuire simpla $a += 4; // echivalent cu $a = $a + 4; $a are valoarea 5 acum $a -= 1; // echivalent cu $a = $a - 1; $a *= 2; // echivalent cu $a = $a * 2; $a /= 3; // echivalent cu $a = $a / 3; $a %= 2; // echivalent cu $a = $a % 2; restul impartirii lui $a la 2 $a = &$b; /* $a este o referinta la $b, adica ambele variabile fac referire la aceeasi entitate; daca $a se schimba, se va schimba si $b. Altfel spus, $a este un alias pentru $b */ $s = "Salut"; // atribuire simpla $s .= " straine!"; // echivalent $s = $s . " straine!";
$a += 4; // echivalent cu $a = $a + 1; $a are valoarea 5 acum
De fapt este echivalent cu $a = $a + 4 - hehe, neatentia e molipsitoare :P
Am corectat, multumesc!
Adauga un comentariu la aceasta sectiune.
Operatori pentru siruri de caractere
In aceasta categorie sunt inclusi 2 operatori ".=" (operator de atribuire prin concatenare - vezi mai sus) si "."
Punctul (.) este operatorul de concatenare (legare) stringuri.
print "Text1" . " legat de " . "Text2"; // afiseaza Text1 legat de Text2 $a = "Eu am"; print $a . " mere"; // afiseaza Eu am mere;
la concatenare nu putem foosi si operatorul&?
Adauga un comentariu la aceasta sectiune.
Operatori de control al erorilor @
Operatorul @ este folosit pentru a suprima erorile sau avertismentele produse de PHP.
// $nedefinit = 1; - nu se executa, variabila nu e definita print $nedefinit; // Notice: Undefined variable: nedefinit in file.php on line 120 @print $nedefinit; // nu va genera nici un avertisment / notificare include( "inexistent.php" ); // Warning: include(nedefinit) failed to open... @include( "inexistent.php" ); // nu afiseaza nici un avertisment
Operatorul de executie ` `
Operatorul de executie permite rularea unor aplicatii sau comenzi ale sistemului de operare direct din PHP. Rezultatul executiei este capturat de script si poate fi prelucrat sau afisat. Operatorul ` ` este echivalent cu functia shell_exec.
# in ambele situatii de mai jos este afisat continutul directrului curent $output = `ls -al`; echo "<pre>$output</pre>"; $output = shell_exec('ls -ala'); echo "<pre>$output</pre>";
Alti operatori
PHP mai dispune de urmatoarele tipuri de operatori:
- Operatori aritmetici: +, -, *, etc
- Operatori pe biti: &, |, ^, ~, <<, >>
- Operatori logici: and, or, xor, &&, ||
- Operatori de tip: instanceof
- Operatori pentru vectori: asemanatori celor de comparare, doar ca se aplica vectorilor, operatorul de uniune (+) - leaga 2 sau mai multi vectori
Nimic de afisat.
Adauga un comentariu la aceasta sectiune.