PHP: zmienne, typy, stałe, operatory i konwersje

INF.03 · teoria
autor: redakcja · 08.09.2026
Zmienne z dolarem, typy proste i złożone, stałe define i const, operatory arytmetyczne, porównania i logiczne, inkrementacja oraz rzutowanie typów w PHP 8, z gotowymi wynikami przykładów. Lekcja 12.2 kursu INF.03.

[ INF.03: PYTANIA Z TEGO DZIAŁU ]

Zmien­na to nazwa z do­la­rem na po­cząt­ku, pod którą skrypt trzyma war­tość: liczbę, napis albo wiersz po­bra­ny z bazy. Typu zmien­nej się nie de­kla­ru­je, PHP nadaje go po war­to­ści i zmie­nia w locie, gdy do tej samej zmien­nej trafi coś innego. W części pi­sem­nej wra­ca­ją py­ta­nia z ramką („jaką war­tość będzie miała zmien­na po wy­ko­na­niu kodu", „co wy­pi­sze echo", „jaki wynik da 7 % 3", „który ope­ra­tor łączy napisy", „czym różni się == od ==="). W za­da­niu prak­tycz­nym zmien­ne trzy­ma­ją dane wpi­sa­ne w for­mu­larz i wyniki za­py­tań do bazy, więc każdy skrypt z ar­ku­sza za­czy­na się od kilku przy­pi­sań.

Zmien­na: nazwa z do­la­rem

Nazwa zmien­nej za­czy­na się od znaku $, po nim stoi litera albo pod­kre­śle­nie, a dalej litery, cyfry i pod­kre­śle­nia. Spacja, dywiz, cyfra na po­cząt­ku i pol­skie znaki są nie­do­zwo­lo­ne. Wiel­kość liter ma zna­cze­nie, więc $cena i $Cena to dwie różne zmien­ne, i to jedna z częst­szych przy­czyn pu­ste­go wyniku na ekra­nie. War­tość nadaje ope­ra­tor przy­pi­sa­nia =: naj­pierw liczy się to, co stoi po prawej, a wynik ląduje w zmien­nej po lewej.
<?php $cena = 120; $Cena = 45; $cena = 'Klawiatura'; echo $cena; echo PHP_EOL; echo $Cena;
Klawiatura 45
Trze­cie przy­pi­sa­nie po­ka­zu­je ty­po­wa­nie dy­na­micz­ne: ta sama zmien­na trzy­ma­ła liczbę, a chwilę póź­niej napis, i PHP nie zgła­sza błędu. Co na­praw­dę siedzi w zmien­nej, spraw­dza kilka wbu­do­wa­nych funk­cji.
Zapis
Co robi
var_dump($a)
wy­pi­su­je typ razem z war­to­ścią, na­rzę­dzie do szu­ka­nia błędów
gettype($a)
zwraca samą nazwę typu jako napis
isset($a)
zwraca true, gdy zmien­na ist­nie­je i nie jest null
unset($a)
usuwa zmien­ną z pa­mię­ci
empty($a)
zwraca true, gdy war­tość jest fał­szem albo zmien­nej nie ma
isset (CZY USTAWIONA) spraw­dza ist­nie­nie, empty (CZY PUSTA) spraw­dza war­tość, i te dwie funk­cje mylą się naj­czę­ściej: dla $a = 0 obie zwra­ca­ją true, bo zmien­na ist­nie­je, a zero jest fał­szem. Od­wo­ła­nie do zmien­nej, której nigdy nie usta­wio­no, kończy się ostrze­że­niem Undefined variable i pustym miej­scem w tek­ście. Zasięg zmien­nej we­wnątrz funk­cji opi­su­je lekcja o funk­cjach, na­pi­sach i datach.

Typy proste i zło­żo­ne

Typ to rodzaj war­to­ści, który de­cy­du­je, co wolno z nią zrobić: liczby się dodaje, napisy łączy, war­to­ści lo­gicz­ne spraw­dza w wa­run­ku. PHP ma pięć typów pro­stych i dwa zło­żo­ne.
Typ
Przy­kład przy­pi­sa­nia
Co pokaże var_dump
int (cał­ko­wi­ty)
$a = 42;
int(42)
float (zmien­no­prze­cin­ko­wy)
$b = 19.99;
float(19.99)
string (łań­cuch znaków)
$c = 'Mysz';
string(4) "Mysz"
bool (lo­gicz­ny)
$d = true;
bool(true)
null (brak war­to­ści)
$e = null;
NULL
array (ta­bli­ca)
$f = [45, 120, 650];
array(3) z listą ele­men­tów
object (obiekt)
$g = new DateTime();
object(DateTime) z polami
Część ułam­ko­wą od­dzie­la kropka, nie prze­ci­nek: 19,99 to błąd skład­ni. Napis wolno za­pi­sać w apo­stro­fach albo w cu­dzy­sło­wie, a róż­ni­cę między nimi opi­su­je lekcja o skład­ni i osa­dza­niu PHP w HTML. Typ bool przyj­mu­je tylko true albo false, wiel­kość liter w tych sło­wach nie ma zna­cze­nia. War­tość null znaczy „nic tu nie ma" i do­sta­je ją pole, któ­re­go za­py­ta­nie do bazy nie wy­peł­ni­ło.
Typy zło­żo­ne trzy­ma­ją wiele war­to­ści naraz. array (ta­bli­ca) to po­nu­me­ro­wa­ny albo na­zwa­ny zestaw war­to­ści i ma własną lekcję o ta­bli­cach. object (obiekt) to dane razem z funk­cja­mi, które na nich pra­cu­ją, i w za­da­niu prak­tycz­nym wy­cho­dzi tylko przy obiek­to­wej wersji mysqli i przy datach.
Pu­łap­ka: gettype zwraca dla liczby zmien­no­prze­cin­ko­wej napis double, a nie float, choć sam typ nazywa się float.

Ty­po­wa­nie dy­na­micz­ne i słabe

PHP jest ję­zy­kiem o słabej kon­tro­li typów: gdy ope­ra­tor do­sta­nie war­tość nie­wła­ści­we­go ro­dza­ju, sam ją prze­ra­bia, za­miast prze­rwać skrypt. Wynik zależy wtedy od ope­ra­to­ra, a nie od tego, co było w zmien­nej.
<?php $x = "5" + 3; $y = "5" . 3; var_dump($x); var_dump($y);
int(8) string(2) "53"
Ten sam napis "5" raz stał się liczbą, bo + dodaje, a raz został na­pi­sem, bo . łączy. Dla­te­go py­ta­nie o wynik zawsze za­czy­na się od roz­po­zna­nia ope­ra­to­ra. Po­rów­na­nie "abc" == 0 w PHP 8 daje false: napis nie­licz­bo­wy po­rów­ny­wa­ny z liczbą każe za­mie­nić na napis liczbę, a nie od­wrot­nie. W PHP 7 to samo po­rów­na­nie dawało true i takie py­ta­nia siedzą jesz­cze w ban­kach, więc w od­po­wie­dziach bywają obie wersje.

Stałe

Stała to nazwa zwią­za­na z war­to­ścią na cały czas dzia­ła­nia skryp­tu: raz nada­nej war­to­ści nie da się zmie­nić ani usunąć. Nadaje się ją na dwa spo­so­by, a używa BEZ dolara.
<?php define('VAT', 23); const SKLEP = 'Komputronik'; $netto = 100; echo SKLEP . ': brutto ' . ($netto * (1 + VAT / 100));
Komputronik: brutto 123
define (ZDEFINIUJ) bierze nazwę w apo­stro­fach i war­tość, więc wolno go po­sta­wić w do­wol­nym miej­scu, także we­wnątrz wa­run­ku. const (STAŁA) jest za­pi­sem krót­szym, ale musi stać w kodzie naj­wyż­sze­go po­zio­mu albo w klasie. Nazwy sta­łych pisze się WIELKIMI li­te­ra­mi, żeby od­róż­nia­ły się od zmien­nych. Stała na­pi­sa­na z do­la­rem prze­sta­je być stałą i staje się zwykłą zmien­ną, co jest go­to­wym kształ­tem py­ta­nia z ramką.
Kilka sta­łych daje sam PHP. PHP_EOL to znak końca wier­sza wła­ści­wy dla sys­te­mu, PHP_VERSION to numer wersji in­ter­pre­te­ra, M_PI to liczba pi, a PHP_INT_MAX to naj­więk­sza liczba cał­ko­wi­ta, jaką da się za­pi­sać.

Ope­ra­to­ry

Ope­ra­tor to znak albo para znaków wy­ko­nu­ją­cych dzia­ła­nie na jednej lub dwóch war­to­ściach.
Ope­ra­tor
Znaczy
Przy­kład
Wynik
+
do­da­wa­nie
7 + 3
10
-
odej­mo­wa­nie
7 - 3
4
*
mno­że­nie
7 * 3
21
/
dzie­le­nie, wynik bywa ułam­kiem
10 / 4
2.5
%
reszta z dzie­le­nia
7 % 3
1
**
po­tę­go­wa­nie
2 ** 3
8
.
łą­cze­nie na­pi­sów
'Cena: ' . 120
Cena: 120
Dzie­le­nie zwraca int tylko przy dzie­le­niu bez reszty: 10 / 5 daje int(2), a 10 / 4 daje float(2.5). Sam iloraz cał­ko­wi­ty zwraca intdiv (DZIELENIE CAŁKOWITE). Ope­ra­tor % liczy resztę, więc $n % 2 == 0 to stan­dar­do­wy test pa­rzy­sto­ści.
<?php echo 7 % 3; echo PHP_EOL; echo 10 / 4; echo PHP_EOL; echo intdiv(10, 4);
1 2.5 2
Napisy łączy wy­łącz­nie kropka. Dwa napisy dodane ope­ra­to­rem + zo­sta­ją za­mie­nio­ne na liczby, więc "3" + "4" daje 7, a nie 34.
<?php $x = "3" + "4"; echo $x; echo PHP_EOL; echo "3" . "4"; echo PHP_EOL; echo 'Cena: ' . 120 . ' zł';
7 34 Cena: 120 zł
Przy­pi­sa­nie zło­żo­ne skraca zapis, w którym zmien­na zmie­nia własną war­tość. $a += 5 znaczy $a = $a + 5, i tak samo dzia­ła­ją -=, *=, /= oraz %=; dla na­pi­sów .= do­kle­ja tekst na koniec. Przy­pi­sa­nie przez re­fe­ren­cję $b = &$a nie ko­piu­je war­to­ści, tylko wiąże obie nazwy z tym samym miej­scem w pa­mię­ci, więc zmiana $b zmie­nia też $a.
<?php $a = 10; $a += 5; $a *= 2; $s = 'Cena: '; $s .= $a; echo $a; echo PHP_EOL; echo $s;
30 Cena: 30
In­kre­men­ta­cja zwięk­sza zmien­ną o jeden i ma dwie po­sta­cie. ++$a (pre­in­kre­men­ta­cja) naj­pierw zwięk­sza, a potem oddaje nową war­tość do wy­ra­że­nia. $a++ (post­in­kre­men­ta­cja) naj­pierw oddaje STARĄ war­tość, a do­pie­ro potem zwięk­sza zmien­ną. Sam zapis $a++ w osob­nym wier­szu jest rów­no­waż­ny $a = $a + 1, róż­ni­cę widać do­pie­ro w środku wy­ra­że­nia. De­kre­men­ta­cja --$a i $a-- działa tak samo, tylko odej­mu­je.
<?php $a = 5; $b = $a++ + ++$a; echo $a; echo PHP_EOL; echo $b;
7 12
Ra­chu­nek idzie krok po kroku. $a++ oddaje do sumy 5 i usta­wia $a na 6. ++$a usta­wia $a na 7 i oddaje do sumy 7. Suma to 5 plus 7, czyli 12, a $a zo­sta­je z war­to­ścią 7.
Ope­ra­tor
Znaczy
Przy­kład
Wynik
==
równe co do war­to­ści
1 == '1'
true
===
równe co do war­to­ści I typu
1 === '1'
false
!=
różne co do war­to­ści
1 != 2
true
!==
różne co do war­to­ści albo typu
1 !== '1'
true
<
mniej­sze
3 < 5
true
>=
więk­sze albo równe
5 >= 5
true
<=>
po­rów­na­nie trój­stron­ne
2 <=> 5
-1
Ope­ra­tor <=> zwraca -1, 0 albo 1, za­leż­nie od tego, czy lewa war­tość jest mniej­sza, równa czy więk­sza od prawej.
Ope­ra­tor
Znaczy
Przy­kład
Wynik
&&
ilo­czyn lo­gicz­ny, ko­niunk­cja
true && false
false
||
suma lo­gicz­na, al­ter­na­ty­wa
true || false
true
!
ne­ga­cja
!true
false
xor
al­ter­na­ty­wa wy­klu­cza­ją­ca
true xor true
false
and
to samo co &&, niższy prio­ry­tet
true and false
false
or
to samo co ||, niższy prio­ry­tet
true or false
true
Róż­ni­ca między && a and nie leży w wyniku, tylko w prio­ry­te­cie. && wiąże moc­niej niż przy­pi­sa­nie, and sła­biej, więc $x = true && false; wpi­su­je do $x war­tość false, a $x = true and false; wpi­su­je true, bo przy­pi­sa­nie wy­ko­nu­je się przed and; w wa­run­kach używa się więc && i ||. Wa­ru­nek na prze­dział to dwa po­rów­na­nia złą­czo­ne ko­niunk­cją: $x >= -5 && $x < 10.
Prio­ry­tet reszty ope­ra­to­rów jest ten sam co w ma­te­ma­ty­ce: po­tę­go­wa­nie przed mno­że­niem i dzie­le­niem, te przed do­da­wa­niem, a nawias zmie­nia ko­lej­ność. Wy­ra­że­nie 2 + 3 * 4 daje 14, a (2 + 3) * 4 daje 20.
Ope­ra­tor trój­ar­gu­men­to­wy skraca in­struk­cję wa­run­ko­wą do jed­ne­go wier­sza: $opis = $stan > 0 ? 'dostepny' : 'brak'; bierze pierw­szą war­tość przy praw­dzie, drugą przy fałszu. Ope­ra­tor ?? (sca­la­nie z null) oddaje lewą stronę, gdy ta ist­nie­je i nie jest null, a ina­czej prawą, więc $imie = $_POST['imie'] ?? 'gosc'; nie wywoła ostrze­że­nia przy pustym for­mu­la­rzu.

Kon­wer­sje typów

Kon­wer­sja to za­mia­na war­to­ści na inny typ. Rzu­to­wa­nie za­pi­su­je się nazwą typu w na­wia­sie przed war­to­ścią i nie zmie­nia samej zmien­nej, tylko wynik wy­ra­że­nia.
Rzu­to­wa­nie
Wynik
(int)"12abc"
12
(int)"abc"
0
(int)12.9
12
(int)true
1
(float)"3.5"
3.5
(string)true
"1"
(string)false
""
(bool)"0"
false
(bool)"0.0"
true
Rzu­to­wa­nie na int obcina część ułam­ko­wą, nie za­okrą­gla, więc (int)12.9 to 12, a nie 13. Napis za­mie­nia­ny na liczbę czyta się od po­cząt­ku do pierw­sze­go znaku, który liczbą nie jest: "12abc" daje 12, a "abc" daje 0. To samo robi funk­cja intval (WARTOŚĆ CAŁKOWITA). Funk­cja settype($zm, 'integer') różni się od niej tym, że prze­ra­bia SAMĄ zmien­ną i zwraca true albo false, a nie prze­ro­bio­ną war­tość.
Fał­szem w PHP jest siedem war­to­ści: false, 0, 0.0, napis pusty "", napis "0", null oraz pusta ta­bli­ca. Wszyst­ko inne jest prawdą, także napis "0.0", napis ze spacją " " oraz liczba ujemna -1.
Dane z for­mu­la­rza przy­cho­dzą do skryp­tu ZAWSZE jako napisy, nawet z pola type="number". Napis "3" da się dodać bez rzu­to­wa­nia, ale przed wsta­wie­niem do za­py­ta­nia SQL rzu­tu­je się go jawnie, żeby do bazy nie poszła litera. Od­bie­ra­nie i spraw­dza­nie danych opi­su­je lekcja o for­mu­la­rzach GET i POST.
<?php $ilosc = "3"; $cena = 45; $suma = (int) $ilosc * $cena; var_dump($suma);
int(135)

Na eg­za­mi­nie

Py­ta­nia pi­sem­ne mają kilka sta­łych kształ­tów. Pierw­szy to ramka z kodem i py­ta­nie o war­tość zmien­nej po wy­ko­na­niu in­struk­cji: liczy się ją wiersz po wier­szu, za­pi­su­jąc wynik każ­de­go przy­pi­sa­nia. Taką ramkę można w prze­glą­dar­ce prze­kli­kać in­struk­cja po in­struk­cji w in­ter­pre­te­rze PHP i po­rów­nać z wła­snym ra­chun­kiem. Drugi to nazwa ope­ra­to­ra: resztę z dzie­le­nia daje %, sumę lo­gicz­ną ||, ilo­czyn lo­gicz­ny &&, a // to po­czą­tek ko­men­ta­rza jed­no­li­nio­we­go, nie dzie­le­nie. Trzeci to typ: typem lo­gicz­nym jest bool (w od­po­wie­dziach Boolean), float to typ zmien­no­prze­cin­ko­wy, a war­tość zmien­no­prze­cin­ko­wą dla $a = 5 i $b = 3 zwraca $a / $b, bo do­da­wa­nie i mno­że­nie liczb cał­ko­wi­tych dają cał­ko­wi­tą. Czwar­ty to po­rów­na­nie: $a === $b przy $a = 1 jest prawdą wy­łącz­nie dla $b rów­ne­go 1 bez apo­stro­fów, bo '1' to napis. Piąty to funk­cja wbu­do­wa­na: settype kon­wer­tu­je zmien­ną do wska­za­ne­go typu, empty($a) dla $a = 0 zwraca true, a define('OSOBA', 'Kowalski') de­fi­niu­je stałą, nie zmien­ną.
Kilka od­po­wie­dzi myli się re­gu­lar­nie. % to reszta, nie iloraz: 7 % 3 daje 1, a nie 2. . łączy napisy, + dodaje liczby, więc "3" + "4" daje 7, a "3" . "4" daje 34. == po­rów­nu­je same war­to­ści, === war­to­ści razem z typem, a = to przy­pi­sa­nie i w wa­run­ku zawsze da prawdę. War­to­ści z $_POST są na­pi­sa­mi, choć wy­glą­da­ją jak liczby.
Pu­łap­ka: $a++ użyte w środku wy­ra­że­nia oddaje STARĄ war­tość, a zwięk­sza zmien­ną do­pie­ro potem. Dla $a = 5 wy­ra­że­nie $a++ + ++$a daje 12, a $a kończy z war­to­ścią 7.
W za­da­niu prak­tycz­nym zmien­ne trzy­ma­ją war­to­ści z pól for­mu­la­rza, iden­ty­fi­ka­tor po­łą­cze­nia z bazą i ko­lej­ne wier­sze wyniku za­py­ta­nia. Kwota albo ilość z for­mu­la­rza wymaga rzu­to­wa­nia na int przed po­li­cze­niem sumy i przed wsta­wie­niem do klau­zu­li WHERE, bo bez tego do za­py­ta­nia trafi napis.

Ściąga

Zapis
Znaczy
$cena = 120;
przy­pi­sa­nie, $Cena to inna zmien­na
var_dump($a)
wy­pi­su­je typ razem z war­to­ścią
isset($a)
zmien­na ist­nie­je i nie jest null
empty($a)
war­tość jest fał­szem, także dla 0
define('VAT', 23);
stała, uży­wa­na bez dolara
7 % 3
reszta z dzie­le­nia, wynik 1
10 / 4
dzie­le­nie, wynik 2.5 jako float
intdiv(10, 4)
iloraz cał­ko­wi­ty, wynik 2
'Cena: ' . 120
łą­cze­nie na­pi­sów, wynik Cena: 120
$a += 5
to samo co $a = $a + 5
$a++
oddaje starą war­tość, potem zwięk­sza
1 === '1'
false, bo === spraw­dza także typ
(int)"12abc"
rzu­to­wa­nie na cał­ko­wi­tą, wynik 12
(bool)"0"
false, jak 0, "", null i pusta ta­bli­ca
Pobierz ściągę PDF
ZAWODNIK
egzamin zawodowy INF.02 · INF.03 · INF.04
Serwer Discord
Egzaminy zawodowe IT/Matury/Studia
@yastor
© 2026 Zawodnik · by Yastor
Arkusze i zasady oceniania pochodzą z CKE. Serwis nie jest powiązany z Centralną Komisją Egzaminacyjną.