Chapter Variabel
memperkenalkan aturan penamaan secara sekilas: nama diawali tanda $, boleh berisi huruf dan angka, dan sensitif terhadap kapitalisasi. Kali ini kita bedah aturan tersebut sampai ke detailnya, karena kesalahan penamaan adalah sumber galat yang sangat sering menjangkiti pemula — dari Parse error karena karakter terlarang sampai bug senyap karena dua nama yang mirip dianggap sama. Setelah menyelesaikan chapter ini, Anda akan bisa memastikan setiap nama variabel yang Anda tulis valid, konsisten, dan aman.
Anatomi Nama Variabel #
Nama variabel PHP terdiri dari dua bagian: tanda $ sebagai penanda, lalu identifier sebagai namanya. Identifier harus memenuhi pola berikut: karakter pertama wajib huruf Latin (a-z, A-Z) atau garis bawah (_), sedangkan karakter berikutnya boleh tambahan angka (0-9). PHP juga menerima byte 0x80-0xFF sebagai bagian dari nama — inilah sebabnya nama variabel dengan karakter non-ASCII seperti $nilaiü secara teknis valid, meski praktik industri hampir selalu menghindarinya demi keterbacaan.
Tabel berikut merangkum beberapa contoh nama beserta statusnya:
| Nama variabel | Status | Penjelasan |
|---|---|---|
$nama | Valid | Huruf saja, bentuk paling umum |
$_nama | Valid | Garis bawah boleh jadi karakter pertama |
$nama2 | Valid | Angka boleh, asal bukan karakter pertama |
$_ | Valid | Garis bawah tunggal pun sah |
$2nama | Tidak valid | Digit tidak boleh mengawali nama |
$nama-lengkap | Tidak valid | Tanda hubung dibaca sebagai operator pengurangan |
$nama lengkap | Tidak valid | Spasi memisahkan dua token berbeda |
Aturan ini dapat dirumuskan menjadi satu regular expression, dan kita bisa mengujinya langsung dengan fungsi preg_match():
<?php
$pattern = '/^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$/';
$kandidat = ['nama', '_nama', 'nama2', '2nama', 'nama-lengkap'];
foreach ($kandidat as $namaCalon) {
$status = preg_match($pattern, $namaCalon) === 1 ? "valid" : "tidak valid";
echo "$namaCalon => $status\n";
}Output yang Dihasilkan:
nama => valid
_nama => valid
nama2 => valid
2nama => tidak valid
nama-lengkap => tidak validMari kita telaah kode di atas:
- Baris 2 (
$pattern = ...): pola^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$adalah terjemahan langsung aturan anatomi — kelas karakter pertama hanya huruf, garis bawah, dan byte0x80-0xFF; kelas kedua menambahkan digit dan boleh berulang (*) sampai akhir string ($). - Baris 5 (
foreach ...): setiap kandidat diuji denganpreg_match()yang mengembalikan1bila cocok dan0bila tidak. - Baris 7 (
$status = ...): hasil1diterjemahkan menjadi teksvalid, selain itutidak valid.
Kapitalisasi Membuat Nama Menjadi Berbeda #
PHP memperlakukan nama variabel sebagai case-sensitive: $nama, $Nama, dan $NAMA adalah tiga variabel yang sama-sama sah namun tidak saling terkait. Perhatikan percobaan berikut:
<?php
$nama = "nilai pertama";
$Nama = "nilai kedua";
echo "nama: $nama\n";
echo "Nama: $Nama\n";
$stok = 10;
$STOK = 99;
echo "stok: $stok, STOK: $STOK\n";Output yang Dihasilkan:
nama: nilai pertama
Nama: nilai kedua
stok: 10, STOK: 99Kedua pasang variabel hidup berdampingan tanpa saling menimpa karena tombol Shift memang mengubah identitas nama. Perilaku ini berbeda dengan nama function dan class yang tidak sensitif kapitalisasi, sehingga pemula sering lupa bahwa aturan variabel justru lebih ketat. Bug klasiknya: variabel didefinisikan sebagai $totalHarga lalu dibaca sebagai $totalharga — PHP tidak mengeluh saat penugasan, tetapi membaca $totalharga memicu Warning: Undefined variable karena nama tersebut memang belum pernah diisi.
Nama yang Ditolak PHP #
Dua jenis nama khusus ditolak PHP lewat jalur berbeda. Pertama, $this adalah nama yang direservasi untuk keperluan object-oriented programming — penugasan apa pun padanya memicu galat fatal:
<?php
$this = "coba";Saat dijalankan, PHP menghentikan program dengan pesan Fatal error: Cannot re-assign $this. Kata $this baru akan kita pakai ketika membahas method dan object pada Section Object-Oriented Programming; untuk sekarang cukup ingat bahwa nama tersebut tidak boleh dijadikan variabel biasa.
Kedua, nama yang melanggar pola identifier ditolak sejak tahap parsing — program bahkan tidak mulai berjalan:
<?php
$2nama = "salah";PHP menolaknya dengan Parse error: syntax error, unexpected integer "2", expecting variable or "{" or "$". Perhatikan bahwa pesannya menyebut alternatif { atau $ — keduanya berkaitan dengan dynamic variables yang akan kita bahas pada chapter khusus nanti. Nama dengan tanda hubung seperti $nama-lengkap juga ditolak dengan Parse error karena parser membacanya sebagai $nama dikurangi lengkap, bukan satu nama utuh.
Sebaliknya, kata kunci bahasa PHP seperti function, list, atau empty boleh dipakai sebagai nama variabel — penanda $ cukup untuk membedakannya dari keyword:
<?php
$function = "strlen";
$list = [1, 2, 3];
$empty = false;
echo $function("PHP"), "\n";
var_dump($list, $empty);Output yang Dihasilkan:
3
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
bool(false)Baris echo $function("PHP") memanggil fungsi yang namanya tersimpan di dalam string "strlen", sehingga hasilnya panjang string "PHP" yaitu 3. Kemampuan memanggil fungsi lewat variabel string ini akan kita manfaatkan lagi pada pembahasan callable.
Konvensi Penamaan dalam Ekosistem PHP #
Aturan bahasa hanya menjawab pertanyaan “boleh atau tidak”; konvensi komunitas menjawab “seperti apa yang enak dibaca”. Tiga gaya penamaan mendominasi ekosistem PHP:
| Gaya | Bentuk | Umum dipakai untuk |
|---|---|---|
snake_case | $total_belanja | WordPress, kode lama, banyak aplikasi buatan Indonesia |
camelCase | $totalBelanja | Symfony, Laravel, mayoritas kode modern |
PascalCase | ProdukController | Nama class (hampir universal) |
Kedua gaya pertama sama-sama sah bagi PHP; yang penting satu proyek memilih satu gaya dan menaatinya. Panduan gaya resmi komunitas seperti PSR-12 menstandarkan banyak hal (indentasi, posisi kurung, panjang baris), namun sengaja tidak memaksa gaya penamaan variabel — ketiadaan aturan resmi inilah yang membuat konsistensi tim menjadi kunci. Nama yang baik juga menggambarkan isi: $x menyembunyikan makna, sedangkan $jumlahBarang menjelaskannya tanpa perlu membaca baris berikutnya.
Jebakan Array $GLOBALS #
Superglobal $GLOBALS menyimpan referensi ke seluruh variabel global — detailnya akan kita bedah pada Chapter Variable Scope
dan Superglobals
. Karena setiap variabel global otomatis menjadi elemen $GLOBALS, menghapus elemen tersebut juga menghapus variabelnya:
<?php
$saldo = 50000;
unset($GLOBALS['saldo']);
var_dump(isset($saldo));
var_dump(isset($GLOBALS['saldo']));Output yang Dihasilkan:
bool(false)
bool(false)Hasil false dua kali membuktikan variabel $saldo benar-benar lenyap dari symbol table setelah unset($GLOBALS['saldo']) — sebuah kekuatan berbahaya bila digunakan tanpa sengaja. PHP 8.1 turut menutup celah penulisan massal: menimpa $GLOBALS secara utuh seperti $GLOBALS = [] kini memicu Fatal error: $GLOBALS can only be modified using the $GLOBALS[$name] = $value syntax. Satu-satunya tulisan yang diizinkan adalah per elemen, misalnya $GLOBALS['saldo'] = 50000;.
Ringkasan #
Nama variabel PHP dibangun dari tanda $ dan identifier yang diawali huruf atau garis bawah, dilanjutkan huruf, angka, atau garis bawah; digit di posisi pertama dan tanda hubung ditolak parser. Kapitalisasi bersifat case-sensitive, $this direservasi, dan $GLOBALS menyimpan seluruh variabel global sehingga perlu diperlakukan hati-hati. Dengan aturan ini kokoh, kita siap bertanya: bagaimana menyimpan nilai yang justru tidak boleh berubah? Chapter Constants
menjawabnya.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
contoh.php
Unduh berkas<?php
// contoh.php — rangkuman Chapter Aturan Penamaan Variabel.
// Jalankan dengan: php contoh.php
// Nama yang valid: diawali huruf atau garis bawah, lalu huruf/angka/garis bawah.
$_nama = "Budi";
$nama2 = "Siti";
$nama_panjang = "Ayu";
var_dump($_nama, $nama2, $nama_panjang);
// Kapitalisasi berbeda = variabel berbeda.
$stok = 10;
$STOK = 99;
echo "stok: $stok, STOK: $STOK\n";
// Kata kunci bahasa boleh dipakai sebagai nama variabel (kecuali $this).
$function = "strlen";
echo "Panjang kata 'PHP': ", $function("PHP"), "\n";
// Validasi nama variabel dengan regular expression.
$pattern = '/^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$/';
foreach (["nama", "_nama", "nama2", "2nama", "nama-lengkap"] as $kandidat) {
$status = preg_match($pattern, $kandidat) === 1 ? "valid" : "tidak valid";
echo "$kandidat => $status\n";
}