== / === / != / <=> în PHP

Operatori PHP 4+ (<=>: PHP 7.0+)

Compară două valori. == compară valoarea după conversie, === compară și tipul, <=> spune care e mai mare.

Sintaxă
$a == $b   $a === $b   $a != $b   $a !== $b   $a < $b   $a <=> $b

Ce face == / === / != / <=>

== (egal) convertește valorile la un tip comun înainte de comparație, deci "10" == 10 este true. === (identic) cere aceeași valoare și același tip, deci "10" === 10 este false. Negațiile sunt != (sau <>) și !==.

Din PHP 8, comparația dintre un număr și un text care nu este numeric se face ca text: 0 == "abc" este false (în PHP 7 era true). Textele numerice sunt comparate ca numere: "1e3" == "1000" este true.

Operatorul „navă spațială” <=> returnează -1 dacă stânga este mai mică, 0 dacă sunt egale și 1 dacă stânga este mai mare. Este perfect pentru funcțiile de sortare (usort). Tablourile se pot compara și ele: == cere aceleași perechi cheie-valoare, === și aceeași ordine și aceleași tipuri.

Exemple

Exemplul 1: == și ===

<?php
var_dump("10" == 10);
var_dump("10" === 10);
var_dump(0 == "abc");
var_dump(null == false);
var_dump(null === false);
var_dump("1e3" == "1000");

Rezultat

bool(true)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)

Exemplul 2: <=> în sortare

Comparând tablouri [nota, nume], sortăm descrescător după notă și, la note egale, alfabetic după nume.

<?php
echo (5 <=> 10) . " " . (10 <=> 10) . " " . (15 <=> 10) . "\n";
echo ("Ana" <=> "Bogdan") . "\n";

$elevi = [["Ioana", 9], ["Mihai", 7], ["Ana", 9]];
usort($elevi, fn($a, $b) => [$b[1], $a[0]] <=> [$a[1], $b[0]]);

foreach ($elevi as [$nume, $nota]) {
    echo "$nume: $nota\n";
}

Rezultat

-1 0 1
-1
Ana: 9
Ioana: 9
Mihai: 7

Exemplul 3: Compararea tablourilor

<?php
$a = ["nume" => "Ana", "varsta" => 25];
$b = ["varsta" => 25, "nume" => "Ana"];
$c = ["nume" => "Ana", "varsta" => "25"];

var_dump($a == $b);
var_dump($a === $b);
var_dump($a == $c);
var_dump($a === $c);

Rezultat

bool(true)
bool(false)
bool(true)
bool(false)

Greșeli frecvente

  • Compari parole sau token-uri cu ==. Pentru valori de securitate folosește hash_equals sau măcar ===, ca să nu apară conversii neașteptate.
  • Scrii = în loc de == într-un if. if ($rol = "admin") atribuie valoarea și este mereu adevărat.
  • Compari numere cu zecimale cu ===: 0.1 + 0.2 === 0.3 este false din cauza rotunjirii. Compară diferența cu o toleranță mică sau rotunjește întâi.

Comenzi înrudite

  • if / else: Execută un bloc de cod doar dacă o condiție este adevărată.
  • switch / match: Alege un bloc de cod în funcție de valoarea unei variabile. match este varianta modernă, mai scurtă.
  • in_array: Verifică dacă o valoare se află într-un tablou.
  • sort: Sortează elementele unui tablou crescător. Există și variante pentru descrescător și pentru chei.
  • ?? / ??= / ?->: Operatorii pentru valori care pot lipsi: ?? dă o valoare implicită, ??= o atribuie, ?-> oprește apelul pe null.