Topik ini membahas cara kerja variabel PHP beserta tipe data yang tersimpan di dalamnya. Materi yang dicakup meliputi aturan penamaan variabel, pemeriksaan nilai dan tipe dengan fungsi bawaan, lima tipe data dasar, perbedaan perbandingan lemah dan perbandingan ketat, serta konversi tipe otomatis bernama type juggling. Pemahaman materi ini menjadi bekal langsung bagi pembahasan mode strict pada topik strict_types.
Deklarasi dan penamaan variabel#
Variabel PHP dimulai dengan tanda dolar $ diikuti nama variabelnya. Nilai diberikan melalui operator penugasan =, dan tipe data tidak perlu dinyatakan karena tipe variabel mengikuti nilai yang disimpannya. Variabel juga tidak perlu dideklarasikan lebih dahulu, karena variabel baru tercipta tepat pada saat penugasan pertama dilakukan. Perilaku ini membuat program PHP pendek dan cepat ditulis, tetapi menuntut kedisiplinan karena salah ketik nama variabel tidak langsung terlihat.
Nama variabel mengikuti aturan yang tetap. Karakter setelah tanda $ harus berupa huruf atau garis bawah, sedangkan angka hanya boleh muncul pada karakter kedua dan seterusnya. Tanda hubung dan spasi tidak diizinkan karena bertabrakan dengan operator bahasa. Penamaan juga bersifat case-sensitive, yakni peka huruf besar dan kecil, sehingga $nama dan $Nama merupakan dua variabel yang berbeda.
// tidak-dijalankan
$nama_depan = "Ali"; // sah: huruf setelah tanda $, dipisah garis bawah
$_total = 5000; // sah: garis bawah boleh menjadi karakter pertama
$stok2026 = 120; // sah: angka boleh muncul setelah karakter pertama
$2stok = 120; // tidak sah: diawali angka
$harga-barang = 2500; // tidak sah: tanda hubung dibaca sebagai pengurangan
Memeriksa nilai dan tipe dengan var_dump#
Fungsi var_dump menampilkan nilai beserta tipenya sekaligus, sehingga menjadi alat pemeriksa yang paling sering digunakan saat belajar dan saat mencari penyebab perilaku tak terduga. Fungsi ini menerima satu atau lebih argumen dan mencetak rincian setiap argumen dalam urutan pemberiannya. Berkas berikut menyimpan tiga nilai bertipe berbeda, lalu memeriksanya dalam satu pemanggilan.
<?php
$harga = 3500;
$nama = "Kopi";
$tersedia = true;
var_dump($harga, $nama, $tersedia);int(3500)
string(4) "Kopi"
bool(true)Keluaran tersebut memuat tiga informasi sekaligus. Nilai $harga bertipe int bernilai 3500, nilai $nama bertipe string dengan panjang empat, dan nilai $tersedia bertipe bool bernilai true. Angka empat pada string(4) menyatakan panjang string dalam byte. Perbedaannya dengan jumlah karakter menjadi penting saat string memuat karakter non-ASCII, sebagaimana dibahas pada topik string.
Fungsi gettype melengkapi var_dump dengan mengembalikan nama tipe sebuah nilai sebagai string. Fungsi ini berguna ketika nama tipe hendak dicetak atau dibandingkan, dan keluarannya berbentuk integer, double, string, boolean, atau NULL sesuai konvensi internal PHP.
<?php
$nilai = 42;
echo gettype($nilai) . PHP_EOL;
$nilai = "empat puluh dua";
echo gettype($nilai) . PHP_EOL;integer
stringContoh di atas menegaskan sifat dinamis variabel PHP. Variabel $nilai mula-mula menyimpan bilangan bulat, lalu menyimpan string pada penugasan berikutnya tanpa langkah konversi yang eksplisit. Tipe mengikuti nilai terakhir, bukan sebaliknya.
Tipe-tipe dasar#
Lima tipe data dasar mencakup kebutuhan mayoritas program tahap awal. Tipe int menyimpan bilangan bulat, tipe float menyimpan bilangan pecahan, tipe string menyimpan rangkaian karakter, tipe bool menyimpan nilai kebenaran true atau false, dan tipe null menyatakan ketiadaan nilai. Tabel berikut merangkum kelima tipe tersebut beserta contoh nilai yang lazim.
| Tipe | Contoh nilai | Keterangan |
|---|---|---|
int | 42, -7 | bilangan bulat |
float | 2.5, 1.5e3 | bilangan pecahan presisi ganda |
string | "Kopi", 'teh' | rangkaian karakter |
bool | true, false | nilai kebenaran |
null | null | tanpa nilai |
<?php
var_dump(42);
var_dump(2.5);
var_dump(true);
var_dump(null);int(42)
float(2.5)
bool(true)
NULLTipe null menempati posisi khusus karena hanya memiliki satu nilai, yaitu null. Variabel yang belum pernah diberi nilai juga diperlakukan bernilai null oleh PHP. Karena itu, pemeriksaan dengan fungsi isset menjadi cara baku untuk memastikan sebuah variabel sudah menyimpan nilai sebelum digunakan.
Perbandingan lemah dan perbandingan ketat#
PHP menyediakan dua keluarga operator perbandingan. Operator == melakukan perbandingan lemah, yakni kedua nilai dikonversi terlebih dahulu ke tipe yang sama sebelum dibandingkan. Operator === melakukan perbandingan ketat, yakni kedua nilai harus bernilai sama dan bertipe sama tanpa konversi apa pun. Pasangan != dan !== berlaku sebagai kebalikan dari masing-masing operator.
<?php
var_dump(1 == "1");
var_dump(1 === "1");
var_dump("10" == "1e1");
var_dump(0 == "");
var_dump("abc" == 0);bool(true)
bool(false)
bool(true)
bool(false)
bool(false)Hasil di atas menunjukkan perilaku yang perlu dihafal. Baris pertama bernilai true karena string "1" dikonversi menjadi bilangan sebelum dibandingkan, sedangkan baris kedua bernilai false karena tipenya berbeda. Baris ketiga bernilai true karena kedua string sama-sama numerik dan bernilai 10. Dua baris terakhir mencerminkan perubahan penting PHP 8.0, yaitu string yang tidak numerik tidak lagi dianggap sama dengan angka 0 seperti pada PHP 7.
Type juggling#
PHP mendukung type juggling, yakni konversi tipe yang dilakukan secara otomatis ketika nilai bertipe berbeda terlibat dalam satu operasi. Konversi ini juga bekerja pada operator aritmetika dan penggabungan string, sehingga string numerik dapat dijumlahkan langsung tanpa langkah konversi eksplisit.
<?php
$total = "3" + "4";
var_dump($total);
$label = "Jumlah: " . 5;
var_dump($label);int(7)
string(9) "Jumlah: 5"Kedua baris pada contoh memperlihatkan dua arah konversi yang berbeda. Operator + adalah operator aritmetika, sehingga kedua string dikonversi menjadi bilangan dan hasilnya bertipe int. Operator titik adalah operator penggabungan string, sehingga bilangan 5 dikonversi menjadi string dan hasilnya bertipe string. Hasil yang sama diperoleh pada penulisan "Jumlah: 5" dengan tanda kutip ganda.
Konversi otomatis ini nyaman untuk kasus sederhana, tetapi menjadi sumber kesalahan saat string yang terlibat tidak sepenuhnya numerik. Pada PHP 8, operasi aritmetika terhadap string yang tidak bernilai numerik menghasilkan peringatan A non-numeric value encountered, dan bagian angka terdepan saja yang dihitung. Karena perilaku semacam ini, pemeriksaan tipe yang ketat biasanya diaktifkan pada kode modern, sebagaimana dibahas pada topik strict_types.
Kesalahan umum#
Tiga kesalahan berikut paling sering ditemui saat bekerja dengan variabel dan tipe.
- Variabel digunakan sebelum diberi nilai. PHP mencetak peringatan
Undefined variable, memperlakukan variabel itu sebagainull, lalu melanjutkan eksekusi. Bug sering baru terlihat jauh dari baris penyebabnya. Perbaikannya adalah memberi nilai awal pada setiap variabel. - Perbandingan lemah digunakan terhadap masukan yang tipenya tidak pasti, misalnya data dari form atau query string yang selalu berbentuk string. Hasilnya bernilai benar pada kondisi yang seharusnya salah. Perbaikannya adalah menggunakan
===beserta konversi tipe yang eksplisit. - Nama variabel ditulis dengan huruf besar dan kecil yang tidak konsisten. PHP menganggap
$Totaldan$totalberbeda, sehingga muncul peringatan variabel tak terdefinisi. Perbaikannya adalah menetapkan satu gaya penulisan sejak awal berkas.
Ringkasan#
- Variabel diawali tanda
$, tercipta saat penugasan pertama, dan penamaannya bersifat case-sensitive dengan angka yang tidak boleh menjadi karakter pertama. var_dumpmenampilkan nilai beserta tipenya, sedangkangettypemengembalikan nama tipenya, dan keduanya menjadi alat utama pemeriksaan saat belajar.- Perbandingan lemah
==mengonversi tipe sebelum membandingkan, sedangkan perbandingan ketat===menuntut nilai dan tipe yang sama, dan PHP 8 memperketat aturan string non-numerik. - Type juggling mengonversi tipe secara otomatis saat operasi menuntutnya, sehingga string numerik bisa dijumlahkan dan bilangan bisa digabung ke string.
Referensi#
- Variables — PHP Manual — Aturan dasar variabel PHP, dari penamaan hingga nilai bawaannya.
- Type Juggling — PHP Manual — Perilaku konversi tipe otomatis beserta tabel perbandingan antartipe.
- Comparison Operators — PHP Manual
— Dokumentasi operator
==,===, dan keluarga perbandingan lainnya. - Backward incompatible changes (PHP 8.0) — PHP Manual — Daftar perubahan PHP 8.0, termasuk perbandingan string non-numerik yang diperketat.
- gettype — PHP Manual — Dokumentasi fungsi yang mengembalikan nama tipe sebuah nilai.