Język PHP ma bogaty zestaw operatorów, za pomocą których można porównywać wartości, przypisywać wartości zmiennym, wykonywać działania na bitach itd. Nie wszystkie jednak da się zaliczyć do szerszy kategorii, które opisałem wcześniej. Niektóre są same sobie sterem, żeglarzem, okrętem…
To jednak nie znaczy, że nie warto ich znać. Wręcz przeciwnie!
Ponadto każdy, kto używa operatorów, powinien wiedzieć, jaka jest kolejność i jaki jest kierunek wykonywania działań w wyrażeniach. Uchroni go to przed wieloma przykrymi niespodziankami.
Wszystkiego tego i jeszcze więcej dowiesz się z tego rozdziału kursu. Zatem obie ręce na pokład i ruszamy na szeroki ocean wiedzy o operatorach, a raczej ku portowi po długiej podróży, bo to ostatni rozdział na temat operatorów PHP.
Chcesz, czy nie chcesz, w tym rozdziale poznasz odpowiedzi między innymi na następujące pytania:
- Czym jest konkatenacja i jak wygląda operator konkatenacji PHP?
- Co oznacza kropka w PHP?
- Czym jest operator tłumienia błędów PHP?
- Do czego służy operator
instanceof
PHP? - Jaka jest kolejność wykonywania działań w PHP?
- Czy działania w PHP są wykonywane od prawej strony w lewo, czy odwrotnie?
Ze wszystkich wymienionych powyżej tematów chyba najbardziej tajemniczo brzmi ten, który nazywa się konkatenacja. Zaczniemy więc od niego.
Konkatenacja w PHP
Słowo konkatenacja pochodzi z łaciny (łac. concatenatio) i oznacza mniej więcej łączenie czegoś, tak jak łączy się ogniwa łańcucha. Stąd już prosta droga do zrozumienia operacji zwanej konkatenacją w PHP, czy ogólnie w językach programowania.
Konkatenacja w PHP to operacja łączenia wartości dwóch wyrażeń w jeden łańcuch znaków.
Operator konkatenacji PHP ma postać kropki. Sposób jego użycia jest banalnie prosty. Łączy on swój lewy argument z prawym i zwraca wynik w postaci łańcucha znaków, np.
var_dump(1 . 2); // Wynik: string(2) "12"
$a = "Dywizjon ";
$b = 404;
var_dump($a . $b); // Wynik: string(12) "Dywizjon 404"
Operator konkatenacji należy do najczęściej używanych operatorów PHP, więc warto go zapamiętać. Wielu programistów używa go nawet w instrukcji echo
, nie pamiętając, że umożliwia ona także dodawanie kolejnych argumentów po przecinkach, np.:
echo "abc", "def"; // Wynik: abcdef
echo "abc" . "def"; // Wynik: abcdef
W pierwszej instrukcji użyłem konstrukcji echo
z dwoma argumentami rozdzielonymi przecinkiem. W drugiej instrukcji użyłem konstrukcji echo z jednym argumentem, zawierającym operator konkatenacji. Wynik w obu przypadkach jest taki sam.
W konstrukcji PHP print
już powyższa „sztuczka” by nam się nie udała, ponieważ konstrukcja ta przyjmuje tylko jeden argument. Możemy więc napisać tylko tak:
print "abc" . "def"; // Wynik: abcdef
print("abc" . "def"); // Można też tak, ale nadal jest tylko jeden argument
Konkatenacja PHP była na rozgrzewkę. Teraz pokażę ci jak częściowo zapanować nad wyświetlaniem komunikatów o błędach przez PHP.
Tłumienie komunikatów o błędach w PHP
W języku PHP dostępny jest operator @
, służący do tłumienia informacji o błędach diagnostycznych, które mogą być generowane i wyświetlane przez PHP.
W ramach przykładu skorzystamy z poprzedniego skryptu. Najpierw pokażę ci wersję bez operatora @
:
$a = "Dywizjon ";
$b = 404;
var_dump($a . $c);
Wynik:
Warning: Undefined variable $c in C:\xampp\htdocs\index.php on line 30 string(9) "Dywizjon "
Zgodnie z oczekiwaniem interpreter PHP wyświetlił ostrzeżenie informujące, że zmienna $c jest niezdefiniowana. Następnie wyświetlił tyle, ile udało mu się uzyskać mimo tej niedogodności.
Za pomocą operatora tłumienia błędów @
możemy „stłumić” wyświetlanie tego komunikatu o błędzie, np.:
@var_dump($a . $c);
Wynik:
string(9) "Dywizjon "
Komunikat o błędzie zniknął. W tym przypadku operator @
dodałem przed funkcją var_dump()
, więc stłumiłem ewentualny komunikat zarówno o braku definicji zmiennej $a, jak i $c.
Poza tym operator tłumienia błędów PHP można dodać przed dowolnym wyrażeniem, ze spacją lub bez, więc wszystkie poniższe przykłady są prawidłowe, choć mogą różnić się między sobą znaczeniem:
@var_dump($a . $c);
var_dump(@$a . $c);
var_dump($a . @$c);
@ var_dump($a . $c);
var_dump($a . @ $c);
Operator @
przydaje się między innymi w sytuacjach, gdy nie wiemy, co może znaleźć się w zmiennej, więc chcemy się zabezpieczyć przed wyświetleniem komunikatu o błędzie na ekranie użytkownika.
Kiedy na przykład dzielimy wartości zmiennych, to możemy chcieć się zabezpieczyć na wypadek dzielenia przez zero.
Oczywiście stłumienie błędu nie oznacza, że możemy sobie pogratulować i spać spokojnie. Dodatkowo powinniśmy jeszcze zaimplementować mechanizm jego obsługi, ale jest to temat jednej z dalszych lekcji.

A teraz opowiem ci o operatorze, którego nie polecam używać początkującym, ale który mimo tego dobrze jest znać.
Operator wykonywania poleceń powłoki
W PHP dostępny jest operator ``
, który umożliwia wykonywanie poleceń powłoki (wiersza poleceń) w skryptach.
Należy z nim bardzo uważać, szczególnie kiedy zawiera zmienne, ponieważ niewłaściwie użyty może zostać wykorzystany do przeprowadzenia ataku hakerskiego.
Przykład użycia operatora ``
:
$host = "shebang.pl";
echo `ping -n 3 {$host}`;
Wynik:
Pinging shebang.pl [85.128.153.168] with 32 bytes of data: Reply from 85.128.153.168: bytes=32 time=6ms TTL=57 Reply from 85.128.153.168: bytes=32 time=6ms TTL=57 Reply from 85.128.153.168: bytes=32 time=6ms TTL=57 Ping statistics for 85.128.153.168: Packets: Sent = 3, Received = 3, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 6ms, Maximum = 6ms, Average = 6ms
Wysłałem ping do domeny shebang.pl i otrzymałem wynik widoczny powyżej. To samo mogę zrobić bezpośrednio w wierszu poleceń, oczywiście jeśli mam do niego dostęp:

Operator instanceof PHP
Operator instanceof PHP może wydawać się nietypowy, ponieważ nie ma postaci symbolu, tylko wygląda jak słowo – instanceof
.
Służy on do pracy z obiektami, o których będziemy jeszcze dużo rozmawiać, więc na razie tylko sygnalizuję jego istnienie i pokazuję prosty przykład użycia, który pozwolić ci mniej więcej zorientować się w sposobie jego działania.
W podrozdziale Obiekty rozdziału Typy danych i zmienne w PHP podałem przykład prostej klasy i pokazałem, jak utworzyć jej obiekt. Dla ułatwienia przedstawiam jej kod jeszcze raz poniżej:
class Computer {
private $cpu;
function set_cpu($cpu) {
$this−>cpu = $cpu;
}
function get_cpu() {
return $this->cpu;
}
}
Teraz możemy utworzyć obiekt tej klasy, a następnie za pomocą operatora instanceof
(zwanego też operatorem typu — ang. type operator) możemy sprawdzić, czy wybrany obiekt należy do tej klasy:
$komputer = new Computer;
var_dump($komputer instanceof Computer); // Wynik: bool(true)
Do tego i innych operatorów związanych z obiektami jeszcze wrócimy i jestem pewien, że nawiążesz z nimi długotrwałą przyjaźń.
A teraz pokażę ci grupę operatorów PHP, które składają się z dwóch operatorów każdy i pozwalają skrócić zapis niektórych operacji przypisania.
Operatory przypisania PHP
Operatory przypisania PHP (ang. assignment operators) łączą operację przypisania z pewną inną operacją, np. dodawania, dzielenia, logicznego OR itd.
Każdy z nich składa się z operatora przypisania (=
) poprzedzonego innym operatorem. Dlatego nazywa się je też operatorami kombinacyjnymi (ang. combined operators). Spójrz na poniższy przykład:
$a = 2;
$a += 4; // To samo, co: $a = $a + 4;
echo $a; // Wynik: 6
Kombinacyjne operatory przypisania są tylko skrótem pozwalającym sprawić, aby kod był odrobinę bardziej zwięzły. W PHP jest ich kilkanaście. W poniższej tabeli znajdziesz ich krótki opis.
Operator | Przykład | Odpowiednik | Opis |
---|---|---|---|
+= | $a += $b | $a = $a + $b | Dodawanie |
-= | $a -= $b | $a = $a - $b | Odejmowanie |
*= | $a *= $b | $a = $a * $b | Mnożenie |
/= | $a /= $b | $a = $a / $b | Dzielenie |
%= | $a %= $b | $a = $a % $b | Dzielenie modulo |
**= | $a **= $b | $a = $a ** $b | Potęgowanie |
&= | $a &= $b | $a = $a & $b | Bitowe AND logiczne |
|= | $a |= $b | $a = $a | $b | Bitowe OR logiczne |
^= | $a ^= $b | $a = $a ^ $b | Bitowe XOR logiczne |
<<= | $a <<= $b | $a = $a << $b | Bitowe przesunięcie w lewo |
>>= | $a >>= $b | $a = $a >> $b | Bitowe przesunięcie w prawo |
.= | $a .= $b | $a = $a . $b | Konkatenacja |
??= | $a ??= $b | $a = $a ?? $b | Koalescencja null |
Bogactwo operatorów w języku PHP sprawia, że można tworzyć zarówno proste, jak i bardziej skomplikowane wyrażenia.
Kiedy wyrażenie zawiera wiele składników połączonych różnymi operatorami, o ostatecznym wyniku decyduje to, w którą stronę i w jakiej kolejności są one wykonywane.
Jeśli chcesz wiedzieć, jaka jest kolejność wykonywania działań w PHP, to uważnie przeczytaj następną sekcję.

Kolejność i kierunek wiązania operatorów w PHP
Kolejność i kierunek wykonywania działań w PHP mogą mieć poważny wpływ na wynik nawet w bardzo prostych wyrażeniach. Już niejeden początkujący programista pogryzł biurko ze złości i niedowierzania, kiedy napisał kod PHP podobny do poniższego i nie otrzymał oczekiwanego wyniku:
$x = 4;
$y = 6;
$z = $x || $y === 4 ? "Któraś zmienna ma wartość 4" : "Żadna zmienna nie ma wartości 4";
Jeśli za pomocą instrukcji echo $z;
sprawdzimy wynik powyższej instrukcji, to będziemy zadowoleni, ponieważ wyświetli nam się napis "Któraś zmienna ma wartość 4"
.
Na wszelki wypadek sprawdzimy jednak też odwrotny przypadek, czyli na przykład taki:
$x = 3;
$y = 6;
Znowu wykonujemy instrukcję echo $z;
i ze zdziwieniem odkrywamy, że tym razem też otrzymujemy napis "Któraś zmienna ma wartość 4"
.
Za ten „zaskakujący” wynik odpowiadają kolejność (ang. precedence) i kierunek wiązania (ang. associativity) operatorów w PHP. Poniżej za pomocą nawiasu pokazuję, w jakiej kolejności są wykonywane wyrażenia w omawianej instrukcji:
$z = ($x || ($y === 4)) ? "Któraś zmienna ma wartość 4" : "Żadna zmienna nie ma wartości 4";
Przy standardowej kolejności wykonywania działań w PHP najpierw zostaje wykonane wyrażenie $y === 4
, a dopiero potem zostaje wykonana logiczna operacja ||
na wartości zmiennej $x i wyniku wyrażenia $y === 4
.
Jeśli chcesz sprawdzić, czy zmienna $x lub zmienna $y ma wartość 4
i w zależności od tego wykonać jakąś dalszą operację, musisz użyć nawiasu:
$z = ($x || $y) === 4 ? "Któraś zmienna ma wartość 4" : "Żadna zmienna nie ma wartości 4";
Teraz będziesz otrzymywać poprawne wyniki. Prościej mówiąc, sytuacja ta jest analogiczna do poniższej:
4 + 8 / 2 = 8
Najpierw zostało wykonane dzielenie, ponieważ ma ono pierwszeństwo przed dodawaniem. Następnie liczba 4 została dodana do wyniku działania 8/2.
A co się dzieje, kiedy wyrażenie zawiera równorzędne operatory? Jaka jest kolejność wykonywania działań w takim przypadku? Na przykład:
2 ** 2 ** 4;
Czy to wyrażenie jest równoznaczne z 216, czy 44? Czyli, czy kolejność wykonywania działań będzie taka:
(2 ** 2) ** 4
czy taka?
2 ** (2 ** 4)
Kiedy operatory są sobie równoważne pod względem pierwszeństwa w kolejności wykonywania działań, to o wyniku operacji decyduje sposób ich wiązania. Operatory mogą być wiązane od lewej, od prawej lub mogą nie mieć zdefiniowanego kierunku wiązania.
Wynikiem wyrażenia 2 ** 2 ** 4
w PHP będzie liczba 65536
, zatem jest ono równoznaczne z 216, a więc z 2 ** (2 ** 4)
. Dlaczego tak? Ponieważ operator **
wiąże się z argumentami prawostronnie, czyli jego działania są wykonywane od prawej do lewej strony.
Poniższa tabela przedstawia kolejność i kierunek wiązania wszystkich opisanych do tej pory (a nawet paru dodatkowych) operatorów PHP w porządku malejącym, czyli od najwyższego do najniższego poziomu w hierarchii wykonywania.
Kierunek wiązania | Operatory | Objaśnienie |
---|---|---|
nd. | clone new | clone i new |
od prawej | ** | operator arytmetyczny |
nd. |
+
-
++
--
~
(int)
(float)
(string)
(array)
(object)
(bool)
@ |
jednoargumentowe operatory arytmetyczne + i - ,
inkrementacja i dekrementacja,
negacja bitowa,
operatory rzutowania typów,
operator tłumienia błędów |
od lewej | instanceof | operator typu |
nd. | ! | negacja logiczna |
od lewej |
*
/
% | operatory mnożenia, dzielenia i dzielenia modulo |
od lewej |
+
- | operatory dodawania i odejmowania |
od lewej |
<<
>> | operatory przesunięcia bitowego |
od lewej | . | operator konkatenacji |
nieokreślony |
<
<=
>
>= | operatory porównań |
nieokreślony |
==
!=
===
!==
<>
<=> | operatory porównań |
od lewej | & | operator bitowy i referencji |
od lewej | ^ | operator bitowy XOR |
od lewej | | | operator bitowy OR |
od lewej | && | operator logiczny AND |
od lewej | || | operator logiczny OR |
od prawej | ?? | operator koalescencji null |
nieokreślony | ? : | operator trójargumentowy |
od prawej |
=
+=
-=
*=
**=
/=
.=
%=
&=
|=
^=
<<=
>>=
??= | kombinacyjne operatory przypisania |
nd. | print | konstrukcja językowa print |
od lewej | and | operator logiczny AND |
od lewej | xor | operator logiczny XOR |
od lewej | or | operator logiczny OR |
W kilku ostatnich rozdziałach pokazałem Ci wiele różnych operatorów PHP. Jeśli uważnie je przestudiowałeś, to znasz już zdecydowaną większość operatorów dostępnych w tym języku.

Nie opisałem jednak wszystkich. W szczególności pominąłem prawie wszystkie operatory używane w programowaniu obiektowym, ale jeszcze ci je pokażę, kiedy dojdziemy do tego tematu.
Nie opisałem też dokładnie operatorów tablicowych, ponieważ są to „zwykłe” operatory, które mają specyficzny sposób działania, kiedy są używane z tablicami. Poznasz je dokładnie już wkrótce, w rozdziale poświęconym tablicom.
To był ostatni rozdział z serii poświęconej operatorom PHP. Można nawet powiedzieć, że to był ostatni rozdział z serii czysto teoretycznej.
W dwóch następnych rozdziałach poznasz konstrukcje, które są solą każdego języka programowania — instrukcje warunkowe i pętle. Na razie jednak polecam przeczytać podsumowanie wiadomości z tego rozdziału i odpowiedzieć na pytania sprawdzające.
Podsumowanie

- Operator konkatenacji (
.
) służy do łączenia dwóch wartości w jeden łańcuch. - Operator tłumienia komunikatów o błędach ma postać
@
. - Operator
@
można wstawić przed dowolnym wyrażeniem, ze spacją lub bez spacji. - Operator
``
umożliwia wykonywanie poleceń powłoki z poziomu PHP, ale należy obchodzić się z nim bardzo ostrożnie, aby nie stworzyć luki do ataku hakerskiego. - Operator
instanceof
umożliwia sprawdzenie, czy dany obiekt należy do określonej klasy. - Kombinacyjne operatory przypisania łączą operację przypisania z inną, stanowiąc skróconą formę zapisu niektórych operacji w PHP.
- Każdy kombinacyjny operator przypisania składa się z operatora przypisania (
=
) poprzedzonego innym operatorem. - W PHP obowiązuje ściśle określona kolejność wykonywania działań, która decyduje o pierwszeństwie wykonywania operacji.
- Jeśli w jednym wyrażeniu znajdują się operatory należące do tego samego poziomu hierarchii pierwszeństwa, to o kolejności ich wykonania decyduje kierunek wiązania.
- Mimo że w PHP są zdefiniowane zasady dotyczące kolejności wykonywania operatorów, w większości przypadków lepiej jest się zabezpieczyć przez zastosowanie nawiasów.
Pytania
- Jak wygląda i do czego służy operator konkatenacji PHP?
- Jak wygląda i do czego służy operator tłumienia komunikatów o błędach PHP?
- Jak wygląda i do czego służy operator wykonywania poleceń powłoki w PHP?
- Na co trzeba uważać, kiedy używa się operatora wykonywania poleceń powłoki PHP?
- Jak wygląda i do czego służy operator typu PHP?
- Jak wyglądają i do czego służą kombinacyjne operatory przypisania PHP?
- Jakie zasady dotyczące kolejności wykonywania działań obowiązują w PHP?