24-03-2023
Operatory porównania jak nazwa wskazuje, porównują ze sobą 2 rzeczy. Operatory te będą dla Ciebie bardzo przydatne, gdy przejdziemy do instrukcji warunkowych, ale o tym później 😉 Teraz skupimy się na tym jakie mamy operatory.
Operatory porównania
Równy
Operator ten wyrażamy za pomocą 2 znaków ==. Jest to porównanie 2 wartości czy są sobie równe.
<?php $variable1 = 10; $variable2 = 10; var_dump($variable1 == $variable2); // bool(true) var_dump($variable1 == 14); // bool(false) var_dump(12 == 12); // bool(true)
Ważne
Przed wersją PHP 8.0 jeśli porównywało się tekst do liczby to najpierw była wykonywana zamiana tekstu na liczbę. Prowadziło to do nieporozumień jak poniżej:
<?php var_dump(0 == "a"); // dla wersji PHP 7.4: bool(true) var_dump(0 == "a"); // dla wersji PHP 8.0: bool(false)
Identyczny
Można by się zastanawiać dlaczego tu jest kolejny operator „identyczny” skoro już mamy „równy”. Otóż w PHP operator „równy” nie weryfikuje typu, przez co porównanie liczby 3 do tekstu ’3′ zwróci TRUE. Aby mieć pewność, że dane wartości są identyczne, są tego samego typu należy użyć operatora „identyczny”, który jest wyrażony przez ===. PHP również dla niektórych przypadków porównań używając „równy” może w Twoim odczuciu zachować się nieoczekiwanie (zwróci TRUE, gdy porównamy false z 0). Pełną listę porównań możesz znaleźć na oficjalnej stronie PHP -> [LINK].
Poniżej zamieszczam przykłady == i ===, w celu zobrazowania różnic między nimi 😉
<?php var_dump(12 == '12'); // bool(true) var_dump(12 === '12'); // bool(false) var_dump('12' === '12'); // bool(true) var_dump(false == '0'); // bool(true) var_dump(false == 0); // bool(true) var_dump(false == false); // bool(true) var_dump(false === '0'); // bool(false) var_dump(false === 0); // bool(false) var_dump(false === false); // bool(true)
Większy
<?php var_dump(10 > '0'); // bool(true) var_dump(10 > 12); // bool(false) var_dump(10 > 8); // bool(true)
Większy, bądź równy
<?php var_dump(10 >= '0'); // bool(true) var_dump(10 >= 12); // bool(false) var_dump(10 >= 10); // bool(true)
Mniejszy
<?php var_dump(10 < '0'); // bool(false) var_dump(10 < 12); // bool(true) var_dump(10 < 10); // bool(false)
Mniejszy, bądź równy
<?php var_dump(10 <= '0'); // bool(false) var_dump(10 <= 12); // bool(true) var_dump(10 <= 10); // bool(true)
Różny
Tu mamy dwie możliwości wyboru:
- <>
- !=
W praktyce niczym się nie różnią, jednakże w swojej karierze w PHP widziałam zdecydowanie więcej razy != niż <>.
<?php var_dump(10 != '0'); // bool(true) var_dump(10 != 12); // bool(true) var_dump(10 != 10); // bool(false) var_dump(10 != '10'); // bool(false)
Nieidentyczny
Podobnie jak w porównaniach tak samo jest i tutaj. Operator „różny” nie weryfikuje typu przez co 10 != ’10’ zwraca FALSE. Stąd dodatkowy operator, który porównuje również typ. Operator ten jest wyrażony za pomocą !==.
<?php var_dump(10 !== '0'); // bool(true) var_dump(10 !== 12); // bool(true) var_dump(10 !== 10); // bool(false) var_dump(10 !== '10'); // bool(true)
Spaceship
Operator ten wyrażany jest przez <=>. Ma za zadanie porównanie 2 wartości i zwrócenie informacji czy wartości są sobie równe, bądź która jest większa.
Może zwrócić 3 wartości:
- 1 w momencie, gdy wartość zmiennej znajdującej się po lewej stronie jest większa
- 0 jeśli wartości są sobie równe
- -1 w momencie gdy wartość zmiennej znajdującej się po prawej stronie jest większa
<?php var_dump(1 <=> 1); // 0 var_dump(1 <=> 2); // -1 var_dump(2 <=> 1); // 1 var_dump(1.5 <=> 1.5); // 0 var_dump(1.5 <=> 2.5); // -1 var_dump(2.5 <=> 1.5); // 1 var_dump("a" <=> "a"); // 0 var_dump("a" <=> "b"); // -1 var_dump("b" <=> "a"); // 1
Ćwiczenia
Ćwiczenie 1
Mamy 2 koszyki dla 2 osób: Ani i Jakuba. Zsumuj z sobą całkowity koszt koszyków NETTO dla Ani i Jakuba. Przy użyciu operatora spaceship porównaj czyj koszyk jest droższy NETTO.
Koszyk Ani:
- 2 koszulki po 18zł brutto sztuka, 5% VAT,
- 1 para spodni 118zł brutto, 18% VAT,
- 3 pary skarpetek po 5zł 1 para, 3% VAT.
Koszyk Jakuba:
- 3 koszulki po 13zł brutto sztuka, 4% VAT,
- 1 para spodni 80zł brutto, 12% VAT,
- 10 par skarpetek po 2zł 1 para, 3% VAT.
Ćwiczenie 2
Spójrz na każdą z poniższych linii i zastanów się jaka wartość zostanie zwrócona dla każdej z nich, czy to będzie TRUE, czy FALSE. Następnie sprawdź swoje odpowiedzi uruchamiając kod. Uruchom kod w PHP 7.4 i PHP 8.2 PHP Sandbox.
<?php var_dump("a" <=> 1); var_dump(1 <=> 2); var_dump(1 <=> true); var_dump(true <=> false); var_dump(true > false); var_dump(15 > 10); var_dump(10 < 15); var_dump(10 < 8); var_dump(null == 0);
Dodatkowe informacje
- Comparison Operators – oficjalna strona PHP z listą operatorów porównania
- PHP type comparison tables – oficjalna strona PHP z tabelą porównującą zachowanie operatorów porównania
Zadanie z * (gwiazdką)! Jaki będzie wynik dla poniższego kodu:
var_dump(md5(’240610708′) == md5(’QNKCDZO’));