Menu

Operatory w PHP: arytmetyczne, logiczne, tekstowe i inne

Operatory PHP działają na wartościach: +, -, *, /, %, ** do arytmetyki, =, +=, .=, ??= do przypisania, &&, ||, ! i xor do logiki, . do łączenia łańcuchów, ==, ===, <=> do porównań oraz ++ i -- do inkrementacji. Poznaj każdą grupę na przykładach i pułapkę priorytetu and vs &&.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Operator bierze jedną lub więcej wartości i tworzy nową: $a + $b dodaje, $a . $b łączy łańcuchy, $a && $b to logiczne AND, $a === $b porównuje, $i++ zwiększa o jeden.

/ zwraca float, chyba że dwie liczby całkowite dzielą się bez reszty: 17 / 5 daje 3.4, a 10 / 5 liczbę całkowitą 2. Gdy chcesz tylko część całkowitą, użyj intdiv(). Zaokrąglanie opisuje strona o matematyce.

Operatory arytmetyczne

OperatorNazwaPrzykładWynik
+Dodawanie7 + 29
-Odejmowanie7 - 25
*Mnożenie7 * 214
/Dzielenie7 / 23.5
%Modulo (reszta)7 % 21
**Potęgowanie7 ** 249
-$aNegacja-7-7

Modulo przydaje się do „co N-tego elementu” i sprawdzania parzystości. Wynik ma znak lewej strony, a dzielenie przez zero rzuca błąd, który można przechwycić:

Operatory przypisania

= zapisuje wartość. Każdy operator arytmetyczny i tekstowy ma formę złożoną, która aktualizuje zmienną w miejscu.

??= należy do rodziny operatora null coalescing. Przypisuje tylko wtedy, gdy zmienna nie jest ustawiona albo ma wartość null.

Inkrementacja i dekrementacja: ++ i --

$i++ zwraca bieżącą wartość, a potem dodaje 1. ++$i dodaje 1, a potem zwraca nową wartość. Różnicę widać dopiero wtedy, gdy używasz wyniku w tym samym wyrażeniu.

Sztuczkę z literami często wykorzystuje się do generowania nazw kolumn arkusza (A, B, ... Z, AA).

Operatory logiczne: &&, ||, ! i xor

OperatorPrawda, gdy
$a && $boba są prawdą
$a || $bco najmniej jeden jest prawdą
!$a$a jest fałszem
$a xor $bdokładnie jeden jest prawdą
$a and $b, $a or $bto samo co && i ||, z niższym priorytetem

&& i || działają skrótowo: prawa strona nie jest obliczana, gdy lewa już przesądza o wyniku. Dzięki temu isset($user) && $user->isAdmin() jest bezpieczne.

and vs &&: pułapka priorytetu

and i or wiążą słabiej niż =, więc w przypisaniu działają dopiero po zapisaniu wartości. To klasyczny błąd:

Niski priorytet przydaje się w jednym idiomie, $file = fopen($path, 'r') or die('Cannot open');, gdzie przypisanie ma nastąpić najpierw. Wszędzie indziej używaj && i ||.

Operatory tekstowe: . i .=

PHP ma dwa operatory tekstowe: . łączy dwa łańcuchy ("Grace" . " " . "Hopper"), a .= dopisuje do zmiennej ($html .= "<li>"). + nigdy nie łączy łańcuchów: "3" + "4" to liczba 7, a "3" . "4" to łańcuch "34". Strona o łańcuchach opisuje interpolację i cudzysłowy.

Porównania i operator spaceship <=>

== porównuje po konwersji typów, === sprawdza też typ, a <=> zwraca -1, 0 albo 1, czyli dokładnie to, czego potrzebują funkcje porównujące przy sortowaniu. Szczegóły i pełna tabela luźnych porównań są na stronie o operatorach porównania.

Operatory tablicowe

+ na tablicach to suma: klucze z lewej tablicy wygrywają, a z prawej dodawane są tylko brakujące klucze. To zaskakuje osoby, które spodziewają się dopisania. == sprawdza te same pary klucz/wartość, === wymaga też tej samej kolejności i typów.

Aby dopisać jedną listę do drugiej, użyj array_merge() albo składni rozpakowania [...$a, ...$b].

Priorytet operatorów

Gdy wyrażenie miesza operatory, PHP stosuje je w ustalonej kolejności. Te, na których ludzie się potykają, z tym, co wypisuje PHP 8.3:

echo 2 + 3 * 4;        // 14: * before +
echo (2 + 3) * 4;      // 20
echo 2 ** 3 ** 2;      // 512: right to left, 2 ** 9
echo -2 ** 2;          // -4: ** before unary minus
echo "Sum: " . 2 + 3;  // Sum: 5, since PHP 8 + runs before .

W razie wątpliwości dodaj nawiasy. Nic nie kosztują, a następna osoba czytająca linię nie musi pamiętać tabeli.

Najczęściej zadawane pytania

Czym różni się and od && w PHP?

Oba to logiczne AND, ale and ma niższy priorytet niż =. Dlatego $x = true and false; zapisuje true w $x (przypisanie dzieje się najpierw), a $x = true && false; zapisuje false. W wyrażeniach używaj && i ||, a and/or trzymaj z dala od przypisań.

Co robi % w PHP?

% to operator modulo: zwraca resztę z dzielenia całkowitego, więc 10 % 3 daje 1. Wynik ma znak lewego operandu (-7 % 3 daje -1). Dla floatów użyj fmod(), a % 0 rzuca DivisionByZeroError.

Jak podnieść liczbę do potęgi w PHP?

Użyj operatora **: 2 ** 10 daje 1024. Jest prawostronnie łączny, więc 2 ** 3 ** 2 to 2 ** 9 = 512, i wiąże silniej niż jednoargumentowy minus, więc -2 ** 2 daje -4. Funkcja pow(2, 10) robi to samo.

Czym różni się $i++ od ++$i w PHP?

Oba dodają 1 do $i. $i++ (postinkrementacja) zwraca starą wartość, a potem zwiększa; ++$i (preinkrementacja) najpierw zwiększa i zwraca nową wartość. W osobnej linii, jak krok pętli for, nie ma różnicy.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ