Aby zamienić wartość na inny typ, wpisz typ w nawiasach przed nią: (int) "42" daje liczbę całkowitą 42. Forma funkcyjna intval("42") robi to samo. Rzutowanie nigdy nie kończy się błędem: tekst, który nie jest liczbą, staje się 0, a łańcuch zaczynający się od cyfr zachowuje tylko te cyfry.
PHP ma rzutowania (int), (float), (string), (bool), (array) i (object). Każde ma też funkcję: intval(), floatval(), strval(), boolval().
String na int: co zwracają (int) i intval()
PHP czyta cyfry od początku łańcucha, po pominięciu wiodących białych znaków, i zatrzymuje się na pierwszym znaku, który nie pasuje do liczby. Zapis wykładniczy liczy się jako liczba, przedrostek 0x nie.
Zauważ, że "12.7" staje się 12: rzutowanie na int odcina część ułamkową, a nie zaokrągla. Ani (int), ani intval() nie wypisuje tu ostrzeżenia, niezależnie od danych.
intval() z podstawą
intval($value, $base) czyta łańcuch w innym systemie liczbowym. Z podstawą 0 PHP patrzy na przedrostek: 0x dla szesnastkowego, 0b dla binarnego, wiodące 0 dla ósemkowego.
Float na int: obcięcie, a nie zaokrąglenie
(int) odrzuca wszystko po przecinku dziesiętnym, w stronę zera. Jeśli chcesz najbliższą liczbę całkowitą, najpierw zaokrąglij i uważaj na nawiasy:
Ostatnia para to klasyczna pułapka floatów: (0.1 + 0.7) * 10 jest przechowywane jako 7.999999..., więc obcięcie daje 7. Zaokrąglenie najpierw daje 8. Strona o matematyce opisuje round, floor i ceil.
Rzutowanie na bool, string i array
Przy rzutowaniu na bool tylko kilka wartości staje się false: 0, 0.0, "", "0", null i []. Wszystko inne to true, także "0.0", " " i "false".
Przy rzutowaniu na string true staje się "1", a false i null stają się "". Floaty tracą końcowe .0, a bardzo duże lub bardzo małe floaty używają zapisu wykładniczego.
Rzutowanie tablicy na string jej nie łączy. To wypisuje Tags: Array:
<?php
$tags = ["php", "web"];
echo "Tags: " . $tags;
a PHP dodaje ostrzeżenie:
Warning: Array to string conversion in /home/index.php on line 3
Aby zamienić tablicę w tekst, użyj implode(", ", $array) albo json_encode($array).
Wszystkie rzutowania w skrócie
Wybierz wartość, aby zobaczyć, co zwracają dla niej intval, (bool), strval, is_numeric i gettype. Każdą komórkę obliczyło PHP 8.3.
| $x | intval | bool | strval | is_numeric | gettype |
|---|---|---|---|---|---|
| "10" | |||||
| "1abc" | |||||
| "abc" | |||||
| "" | |||||
| " " | |||||
| "0" | |||||
| "0.0" | |||||
| "1e1" | |||||
| "010" | |||||
| 1.5 | |||||
| true | |||||
| false | |||||
| null | |||||
| [] | |||||
| [1, 2] |
Łańcuchy liczbowe i automatyczna konwersja
Łańcuch liczbowy to łańcuch, który wygląda jak liczba: "12", "-3.5", "1e3", z opcjonalnymi białymi znakami wokół. PHP konwertuje je automatycznie w arytmetyce, a is_numeric() mówi, czy łańcuch się kwalifikuje.
"12abc" + 1 nadal daje 13, ale PHP 8 wypisuje Warning: A non-numeric value encountered, a "abc" + 1 rzuca TypeError. Rzutuj albo waliduj przed wykonywaniem arytmetyki na danych od użytkownika.
settype() i gettype()
settype() zmienia typ zmiennej w miejscu, a gettype() go zgłasza. get_debug_type() zwraca krótsze nazwy, które widzisz w komunikatach błędów (int, float, string).
Większość kodu używa zamiast tego rzutowania ($value = (int) $value;), bo jest krótsze i czyta się tak samo.
Waliduj dane zamiast je rzutować
(int) nigdy nie odmawia, więc (int) "abc" po cichu staje się 0, a (int) "5 apples" staje się 5. Dla danych z formularza użyj filter_var z FILTER_VALIDATE_INT: zwraca liczbę całkowitą albo false.
Porównuj wynik przez === false, bo 0 to poprawna liczba całkowita, a == false by ją odrzuciło. Strona o filter_var pokazuje zakresy i inne walidatory.
Najczęściej zadawane pytania
Jak zamienić łańcuch na int w PHP?
Użyj (int) $str albo intval($str); dla podstawy 10 oba dają ten sam wynik. (int) "42" daje 42, (int) "12abc" daje 12, a (int) "abc" daje 0. Aby odrzucić dane, które nie są liczbą całkowitą, użyj filter_var($str, FILTER_VALIDATE_INT), które zamiast zgadywać zwraca false.
Czym różni się intval() od (int) w PHP?
Dla podstawy 10 zwracają ten sam wynik. intval() przyjmuje też podstawę: intval('ff', 16) daje 255, a z podstawą 0 czyta przedrostki takie jak 0x, 0b i wiodące 0 dla systemu ósemkowego. Jako funkcję intval można też przekazać jako callback, na przykład w array_map('intval', $values).
Co zwraca (bool) "0" w PHP?
false. Łańcuch "0" to jedna z wartości fałszywych w PHP, obok "", 0, 0.0, null i []. Każdy inny łańcuch to true, także "0.0", " " i "false".
Jak zamienić liczbę na łańcuch w PHP?
Użyj (string) $n, strval($n) albo wstaw ją w łańcuch: "$n". (string) 3.0 daje "3"; dla stałej liczby miejsc po przecinku użyj number_format($n, 2) albo sprintf('%.2f', $n).