Operatorul “egal” este unul pe care il folosim foarte des in PHP, dar de prea putine ori ne-am intrebat cum se comporta el de fapt. Si pe buna dreptate; daca am diseca fiecare componenta in parte ne-ar lua o vesnicie.
Cu toate acestea, zilele trecute ma uitam pe documentatia unei functii la finalul careia se afla urmatoarea avertizare: This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE, such as 0 or "". Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
Bineinteles ca am mai intalnit aceasta avertizare, dar de data aceasta m-a pus pe ganduri si am inceput sa ma documentez despre ceva ce folosisem de atatea ori fara sa ma intreb de ce. Pentru a ilustra concluziile la care am ajuns am scris o mica bucata de cod:
<?php $integer = 2; $string = '2'; if($integer == $string) echo 'integer == string'; if($integer === $string) echo 'integer === string'; ?>
Cum se va comporta codul de mai sus si de ce? Pentru inceput avem de-a face cu operatorul egal
, singur. In acest context, el este un operator de atribuire. Asta inseamna ca atribuim valoarea 2 variabilei $integer
si valoarea ‘2’ variabilei $string
.
Mai jos, avem doua conditii if()
. Prima foloseste operatorul dublu egal
ca sa verifice egalitatea dintre cele doua variabile. Aceasta conditie va intoarce TRUE
deoarece verifica daca valorile variabilelor sunt egale, ceea ce este adevarat.
In schimb, atunci cand folosim operatorul triplu egal
, conditia va intoarce FALSE
. De ce se comporta astfel? Pentru ca operatorul triplu egal
verifica daca valorile celor doua variabile sunt egale si daca ele sunt de acelasi tip. Astfel, variabilei $integer
i s-a atribuit valoarea matematica 2, iar variabilei $string
i s-a atribuit un sir de caractere ce contine cifra 2.
Din aceasta cauza desi cele doua variabile au aceeasi valoare, ele nu sunt de acelasi fel. Acesta este motivul pentru care a doua conditie va intoarce FALSE
.