Żonglowanie typami i rzutowanie typów
Poznanie automatycznej konwersji typów w PHP oraz ręcznego rzutowania.
Żonglowanie typami i rzutowanie typów to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Czym jest żonglowanie typami?
Żonglowanie typami oznacza, że PHP automatycznie konwertuje typ wartości, gdy operator lub funkcja wymaga innego typu.
Jest to wygodne, ale może prowadzić do trudnych do zauważenia błędów, jeśli nie rozumiesz obowiązujących reguł.
Żonglowanie typami w arytmetyce
PHP konwertuje ciągi znaków na liczby, gdy są używane w kontekście arytmetycznym:
<?php
echo '5' + 3; // 8 — string '5' becomes int 5
echo '5.5' + 1.5; // 7 — string '5.5' becomes float
echo '5 cats' + 1; // 6 — leading numeric part used, rest ignored
echo 'cats' + 1; // 1 — non-numeric string becomes 0Luźne porównanie ==
Operator == porównuje wartości po żonglowaniu typami — może to prowadzić do zaskakujących wyników:
<?php
var_dump(0 == 'a'); // true in PHP 7 (both become 0)
// false in PHP 8 (improved rules!)
var_dump('' == false); // true
var_dump('1' == true); // true
var_dump(null == false); // trueŚcisłe porównanie ===
Zawsze używaj ===, aby porównywać zarówno wartość, jak i typ — nie zachodzi wtedy żadne żonglowanie typami:
<?php
var_dump(1 === '1'); // false — different types
var_dump(1 === 1); // true
var_dump(null === false); // false
var_dump(0 === false); // false
// Rule of thumb: prefer === unless you explicitly need type coercionJawne rzutowanie typów
Rzutuj wartość na określony typ, poprzedzając ją zapisem (type):
<?php
$str = '42.7';
$int = (int) $str; // 42
$float = (float) $str; // 42.7
$bool = (bool) $str; // true
$arr = (array) $str; // ['42.7']
echo $int; // 42
echo $float; // 42.7Funkcja settype()
settype() zmienia typ zmiennej bezpośrednio i zwraca true/false:
<?php
$value = '123';
settype($value, 'integer');
var_dump($value); // int(123)
// Alternative: intval(), floatval(), strval() functions
$n = intval('0xFF', 16); // 255 — parse hex stringPrzypadki brzegowe konwersji ciągu znaków na liczbę
Najważniejsze zasady konwertowania ciągów znaków na liczby przez PHP:
- Poprzedzające białe znaki są ignorowane:
' 42 '→ 42 - Nieprawidłowy początek:
'php8'→ 0 (komunikat w PHP 8) - Notacja naukowa:
'1e3'→ 1000.0 - Ciągi szesnastkowe:
'0x1A'NIE są automatycznie konwertowane na int w PHP 7+
Zasady rzutowania na wartości logiczne
Te wartości są rzutowane na false; wszystkie pozostałe są rzutowane na true:
<?php
$falsy = [false, 0, 0.0, '', '0', [], null];
foreach ($falsy as $v) {
var_dump((bool) $v); // all bool(false)
}
// Careful:
var_dump((bool) '0'); // false — the STRING '0' is falsy!
var_dump((bool) '00'); // true — only exactly '0' is falsyintval() z podstawami liczbowymi
intval() przyjmuje opcjonalny parametr podstawy do analizowania ciągów znaków zawierających liczby:
<?php
echo intval('0b1010', 2); // 10 — binary
echo intval('077', 8); // 63 — octal
echo intval('1F', 16); // 31 — hexadecimal
echo intval('42'); // 42 — decimal (default base 10)Ulepszone żonglowanie typami w PHP 8
PHP 8 naprawił niektóre niespójności w żonglowaniu typami występujące we wcześniejszych wersjach:
0 == 'foo'ma teraz wartośćfalse(w PHP 7 miało wartośćtrue)- Podczas porównywania liczb z ciągami znaków, które nie są liczbami, ciąg nie jest już konwertowany na 0
- Dzięki temu PHP 8 jest bezpieczniejszy, ale może powodować problemy ze starszym kodem zależnym od poprzedniego zachowania
Unikanie błędów związanych z żonglowaniem typami
Dobre praktyki pozwalające uniknąć niespodzianek związanych z żonglowaniem typami:
<?php
declare(strict_types=1); // enforce types at function boundaries
// Always use === for comparisons
if ($status === 'active') { /* safe */ }
// Cast explicitly before arithmetic
$total = (float) $_POST['price'] * (int) $_POST['qty'];
// Validate with filter_var
$age = filter_var($_POST['age'], FILTER_VALIDATE_INT);
if ($age === false) { /* invalid input */ }Szybkie sprawdzenie
Jaki wynik daje wyrażenie (int) '42abc' w PHP?
Podsumowanie: żonglowanie typami
Najważniejsze informacje o obsłudze typów w PHP:
- PHP automatycznie konwertuje typy podczas wykonywania operacji — nazywa się to żonglowaniem typami
==porównuje wartości po żonglowaniu typami, a===wykonuje ścisłe porównanie (typu i wartości)- Wykonuj jawne rzutowanie za pomocą
(int),(float),(string),(bool) - Używaj
intval(),floatval()istrval()jako funkcyjnych alternatyw - PHP 8 usprawnił obsługę niektórych przypadków brzegowych żonglowania typami
- Włącz
strict_types=1, aby ograniczyć niespodzianki w kodzie
Często zadawane pytania
Czy lekcja „Żonglowanie typami i rzutowanie typów” jest bezpłatna?
Tak — pełny tekst „Żonglowanie typami i rzutowanie typów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Żonglowanie typami i rzutowanie typów”?
Poznanie automatycznej konwersji typów w PHP oraz ręcznego rzutowania. Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Żonglowanie typami i rzutowanie typów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Deklarowanie zmiennych w PHP
- Przegląd typów danych PHP
- Wyświetlanie danych za pomocą echo i print
- Żonglowanie typami i rzutowanie typów