Untuk mengubah sebuah nilai ke tipe lain, tulis tipenya dalam tanda kurung di depan nilai itu: (int) "42" menghasilkan integer 42. Bentuk fungsinya, intval("42"), melakukan hal yang sama. Casting tidak pernah gagal: teks yang bukan angka menjadi 0, dan string yang diawali digit hanya menyimpan digit-digit itu.
Cast yang dimiliki PHP adalah (int), (float), (string), (bool), (array), dan (object). Masing-masing juga punya versi fungsi: intval(), floatval(), strval(), boolval().
String ke int: apa yang dikembalikan (int) dan intval()
PHP membaca digit dari awal string, setelah melewati whitespace di depannya, dan berhenti di karakter pertama yang tidak cocok dengan sebuah angka. Notasi eksponen dihitung sebagai angka, awalan 0x tidak.
Perhatikan bahwa "12.7" menjadi 12: casting ke int memotong bagian pecahannya, bukan membulatkannya. Baik (int) maupun intval() tidak mencetak warning di sini, apa pun input-nya.
intval() dengan basis bilangan
intval($value, $base) membaca string dalam sistem bilangan lain. Dengan basis 0, PHP melihat awalannya: 0x untuk heksadesimal, 0b untuk biner, 0 di depan untuk oktal. Kamu bisa memeriksa setiap hasil di bawah ini dengan konverter basis bilangan.
Float ke int: dipotong, bukan dibulatkan
(int) membuang semua angka setelah titik desimal, ke arah nol. Bulatkan dulu kalau kamu ingin bilangan bulat terdekat, dan perhatikan tanda kurungnya:
Pasangan terakhir adalah jebakan float yang klasik: (0.1 + 0.7) * 10 disimpan sebagai 7.999999..., jadi memotongnya menghasilkan 7. Membulatkannya dulu menghasilkan 8. Halaman math membahas round, floor, dan ceil.
Casting ke bool, string, dan array
Ke bool, hanya sedikit nilai yang menjadi false: 0, 0.0, "", "0", null, dan []. Semua yang lain bernilai true, termasuk "0.0", " ", dan "false".
Ke string, true menjadi "1", sedangkan false dan null sama-sama menjadi "". Float membuang .0 di akhir, dan float yang sangat besar atau sangat kecil memakai notasi eksponen.
Casting array ke string tidak menggabungkan isinya. Kode ini mencetak Tags: Array:
<?php
$tags = ["php", "web"];
echo "Tags: " . $tags;
dan PHP menambahkan warning:
Warning: Array to string conversion in /home/index.php on line 3
Pakai implode(", ", $array) atau json_encode($array) untuk mengubah array menjadi teks.
Semua cast dalam satu pandangan
Pilih sebuah nilai untuk melihat apa yang dikembalikan intval, (bool), strval, is_numeric, dan gettype untuknya. Setiap sel dihitung oleh 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] |
String numerik dan konversi otomatis
String numerik adalah string yang terlihat seperti angka: "12", "-3.5", "1e3", dengan whitespace opsional di sekitarnya. PHP mengubahnya secara otomatis dalam aritmetika, dan is_numeric() memberi tahu apakah sebuah string memenuhi syarat itu.
"12abc" + 1 tetap menghasilkan 13, tetapi PHP 8 mencetak Warning: A non-numeric value encountered, dan "abc" + 1 melempar TypeError. Lakukan cast atau validasi sebelum menghitung dengan input pengguna.
settype() dan gettype()
settype() mengubah tipe sebuah variabel secara langsung dan gettype() melaporkannya. get_debug_type() mengembalikan nama yang lebih pendek seperti yang kamu lihat di pesan error (int, float, string).
Kebanyakan kode memakai cast ($value = (int) $value;) sebagai gantinya, karena lebih singkat dan maksudnya sama.
Validasi input alih-alih melakukan cast
(int) tidak pernah menolak, jadi (int) "abc" diam-diam menjadi 0 dan (int) "5 apples" menjadi 5. Untuk input formulir, pakai filter_var dengan FILTER_VALIDATE_INT: fungsi ini mengembalikan integer atau false.
Bandingkan hasilnya dengan === false, karena 0 adalah integer yang sah dan == false akan menolaknya. Halaman filter_var menunjukkan rentang dan validator lainnya.
Pertanyaan yang sering diajukan
Bagaimana cara mengubah string menjadi int di PHP?
Pakai (int) $str atau intval($str); keduanya memberi hasil yang sama untuk basis 10. (int) "42" menghasilkan 42, (int) "12abc" menghasilkan 12, dan (int) "abc" menghasilkan 0. Untuk menolak input yang bukan bilangan bulat, pakai filter_var($str, FILTER_VALIDATE_INT), yang mengembalikan false alih-alih menebak.
Apa bedanya intval() dan (int) di PHP?
Untuk basis 10, hasilnya sama. intval() juga menerima basis bilangan: intval('ff', 16) menghasilkan 255, dan dengan basis 0 fungsi ini membaca awalan seperti 0x, 0b, dan 0 di depan untuk oktal. Karena berupa fungsi, intval juga bisa diberikan sebagai callback, seperti di array_map('intval', $values).
Apa hasil (bool) "0" di PHP?
false. String "0" adalah salah satu nilai falsy di PHP, bersama "", 0, 0.0, null, dan []. Setiap string lain bernilai true, termasuk "0.0", " ", dan "false".
Bagaimana cara mengubah angka menjadi string di PHP?
Pakai (string) $n, strval($n), atau taruh di dalam string: "$n". (string) 3.0 menghasilkan "3"; untuk jumlah desimal yang tetap, pakai number_format($n, 2) atau sprintf('%.2f', $n).