Kurs PHP – Operatory porównania

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

  1. Comparison Operators – oficjalna strona PHP z listą operatorów porównania
  2. PHP type comparison tables – oficjalna strona PHP z tabelą porównującą zachowanie operatorów porównania

 

Komentarze
  1. Damian

    Zadanie z * (gwiazdką)! Jaki będzie wynik dla poniższego kodu:

    var_dump(md5(’240610708′) == md5(’QNKCDZO’));

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.