Jak PHP liczy, porównuje i skleja?
+ - * / % ** i kolejność działań+=, .=, licznik ++== kontra ===, &&, ||, !calculator.php$fruits = ["jabłko", "gruszka", "śliwka"];
echo $fruits[1];?echo count($fruits);?Operator to znak działania między dwiema wartościami. Tabela pokazuje sześć operatorów arytmetycznych: cztery znacie z matematyki, dwa ostatnie wyglądają inaczej niż na kartce.
| Zapis | Nazwa | Przykład | Wynik |
|---|---|---|---|
$a + $b | dodawanie | 17 + 5 | 22 |
$a - $b | odejmowanie | 17 - 5 | 12 |
$a * $b | mnożenie | 17 * 5 | 85 |
$a / $b | dzielenie | 7 / 2 | 3.5 (float) |
$a % $b | reszta z dzielenia (modulo) | 17 % 5 | 2 |
$a ** $b | potęgowanie | 2 ** 10 | 1024 |
Dzielenie / daje float (liczbę z przecinkiem). Wyjątek: gdy obie liczby są całkowite i dzielą się bez reszty, wynik jest int: 6 / 2 to int(3).
echo 10 % 2; // 0 → parzysta
echo 7 % 2; // 1 → nieparzysta
echo 17 % 5; // 2 (17 = 3·5 + 2)
echo 7 / 2; // 3.5
echo intdiv(7, 2); // 3 (bez reszty)
Liczba jest parzysta, gdy reszta z dzielenia przez 2 wynosi 0. Tak samo sprawdzicie, czy liczba dzieli się przez 4 albo czy wiersz tabeli jest co drugi ($row % 2, wraca na lekcji o pętlach).
intdiv to dzielenie całkowite: ile pełnych razy 2 mieści się w 7. Reszta i dzielenie całkowite to para: intdiv(7, 2) daje 3, 7 % 2 daje 1.
Przez zero dzielić nie wolno. 7 / 0, 7 % 0 i intdiv(7, 0) przerywają skrypt błędem DivisionByZeroError. Zanim podzielicie przez zmienną, sprawdzacie, czy nie jest zerem.
echo 2 + 3 * 4; // 14 (najpierw 3 * 4)
echo (2 + 3) * 4; // 20 (nawias wygrywa)
echo "Wynik: " . 2 + 3; // Wynik: 5 (kropka jest słabsza od plusa)
Jak w matematyce: mnożenie przed dodawaniem. Gdy nie jesteście pewni, dajecie nawias. Nawias nic nie kosztuje, a błąd w kolejności kosztuje godzinę szukania.
$total = 3;
$total += 5; // $total = $total + 5
echo $total; // 8
$text = "Suma: ";
$text .= 22; // dokleja na koniec
echo $text; // Suma: 22
$count = 0;
$count++; // $count = $count + 1
$count++;
echo $count; // 2
$count--; // o jeden w dół
echo $count; // 1
= nie znaczy „równa się”, tylko „zmienna dostaje wartość z prawej”. += bierze starą wartość, dodaje i zapisuje z powrotem (są też -=, *=, /=). ++ przydaje się do liczników, na przykład kliknięć czy odwiedzin.
| Zapis | Prawda, gdy… | Przykład | Wynik |
|---|---|---|---|
== / != | wartości równe / różne (typ nieważny) | "5" == 5 | true |
=== / !== | równe wartość i typ / różne | "5" === 5 | false |
< > <= >= | mniejsze, większe, mniejsze lub równe… | 5 >= 5 | true |
Dane z formularza przychodzą zawsze jako tekst, dlatego "5" i 5 spotykają się w kodzie ciągle. Piszemy ===: mniej niespodzianek.
Ciekawostka z PHP Manual: od PHP 7.0 istnieje operator <=> („spaceship operator”), który łączy trzy porównania w jednym znaku i zwraca liczbę ujemną, zero albo dodatnią.
&& „i”: prawda, gdy oba warunki prawdziwe. Kredyt: 18 lat i dochód.|| „lub”: prawda, gdy choć jeden. Wejście: bilet lub pracownik.! „nie”: odwraca. !$isAdult to „niepełnoletni”.$age = 20; $hasTicket = false;
$age >= 18 && $hasTicket // false
$age >= 18 || $hasTicket // true
Wynik to zawsze true albo false. Na następnej lekcji trafi do if: „jeśli warunek, to zrób”.
1. W języku PHP, dla zmiennych a = 5 i b = 3 wartość typu zmiennoprzecinkowego zwróci wyrażenie
a + ba * ba / ba && b2. W języku PHP sumę logiczną oznacza operator
!||+&&„Suma logiczna” to matematyczna nazwa „lub”, „iloczyn logiczny” to „i”. Na egzaminie te nazwy padają zamiast znaków.
calculator.php. Wpisz dwie zmienne: $a = 17; i $b = 5;<br>): sumę, różnicę, iloczyn, iloraz zaokrąglony do 2 miejsc funkcją round($a / $b, 2) i resztę z dzielenia.$height = 1.80; $weight = 75; i policz BMI: waga podzielona przez wzrost do kwadratu, też round(..., 2).localhost/calculator.php. Gdy działa, zostaw plik w folderze kursu.Ma się pojawić: Suma: 22, Różnica: 12, Iloczyn: 85, Iloraz: 3.4, Reszta: 2, a niżej BMI: 23.15.
Dla szybkich: zmień $b na 0 i przeczytaj komunikat błędu. Potem wróć do 5.
Bez komputera. Zapisz wynik każdej linii, potem sprawdź uruchamiając kod.
echo 17 % 5; // 1.
Co wypisze ten kod?
echo 2 + 3 * 4; // 2.
Co wypisze ten kod?
echo "Wynik: " . 2 + 3; // 3.
Co wypisze ten kod?
var_dump("5" === 5); // 4.
Co wypisze ten kod?
$i = 5; $i++; $i += 10; echo $i; // 5.
Co wypisze ten kod?
Pułapki są w linii 3 i 4. Kto ma 5 na 5, tłumaczy linię 3 sąsiadowi.
"5" == 5 daje true, a "5" === 5 daje false?echo 10 - 2 * 3;, a co echo (10 - 2) * 3;?Następna lekcja: instrukcja warunkowa if. Wyniki porównań z dzisiaj staną się warunkami.
| Na lekcji | W produkcji | Status |
|---|---|---|
Cena jako float: 49.99 * 3 | Pieniądze trzyma się w groszach jako int (4999 * 3). Float traci końcówki: floor((0.1 + 0.7) * 10) daje 7, nie 8. Na fakturze grosz się nie zgadza. | float do pieniędzy: unikane |
round($x, 2) do pokazania | number_format($total, 2, ',', ' ') wypisze 1 234,50: przecinek i odstęp tysięcy po polsku. | nadal w użyciu |
== i === obok siebie | W zespole obowiązuje ===. Narzędzia sprawdzające kod (PHPStan, PHP-CS-Fixer) zgłaszają każde == przed połączeniem zmian. | ==: unikane |
| Dzielenie bez sprawdzenia | Średnia z zera zamówień to DivisionByZeroError i strona 500 u klienta. Dzielnik sprawdza się przed dzieleniem. | nadal w użyciu |
Licznik $i++ | Tablice obchodzi się pętlą foreach; ++ zostaje w licznikach (odsłony, próby logowania). | nadal w użyciu |