Pada Chapter String Syntax
kita memetakan empat keluarga sintaks string dan model deretan byte di baliknya. Dua keluarga yang paling sering Anda tulis sehari-hari adalah single-quoted ('...') dan double-quoted ("..."). Keduanya menghasilkan tipe data yang sama persis; perbedaannya terletak pada seberapa jauh PHP memproses isi di dalamnya. Memilih jenis kutip secara sadar membuat kode lebih jelas dan menyelamatkan Anda dari bug halus — terutama yang berhubungan dengan tanda dolar dan escape yang tidak terduga.
Perilaku Single-Quoted #
String single-quoted adalah bentuk paling polos: parser PHP hanya mencari dua rangkaian khusus di dalamnya, yaitu \' (kutip tunggal) dan \\ (backslash). Semua yang lain — tanda dolar, huruf \n, bahkan escape yang tampak sah seperti \t — dicetak apa adanya. Bandingkan kedua baris berikut:
<?php
$nama = "Budi";
echo 'Halo, $nama!\n';
echo "Halo, $nama!\n";Output yang Dihasilkan:
Halo, $nama!\nHalo, Budi!Baris pertama mencetak Halo, $nama!\n secara harfiah: $nama tidak diganti nilainya dan \n tidak menjadi baris baru, sehingga keluaran kedua echo menempel di belakangnya. Baris kedua memperlihatkan perilaku berlawanan dari double-quoted — $nama diganti menjadi Budi dan \n benar-benar memindahkan kursor ke baris baru. Dua escape yang dikenal single-quoted bekerja seperti ini:
<?php
echo 'Folder proyek: C:\xampp\htdocs', "\n";
echo 'Hari Jum\'at', "\n";
echo 'Backslash: \\', "\n";Output yang Dihasilkan:
Folder proyek: C:\xampp\htdocs
Hari Jum'at
Backslash: \Baris pertama memperlihatkan bahwa backslash tunggal tidak perlu di-escape bila rangkaiannya tidak membentuk \' atau \\ — \x dan \h dibiarkan apa adanya. Baris kedua dan ketiga adalah dua pengecualian tersebut: \' diperlukan karena kutip tunggal akan menutup string, dan \\ menghasilkan satu backslash sungguhan.
Perilaku Double-Quoted #
String double-quoted diproses penuh: seluruh escape sequence yang kita daftar pada Chapter String Syntax dikenali, dan variabel di dalamnya diganti nilainya lewat mekanisme string interpolation. Lihat ketiga fitur tersebut bekerja sekaligus:
<?php
$nama = "Siti";
$poin = 95;
echo "Selamat, $nama!\n";
echo "Poin Anda: $poin\n";
echo 'Predikat: "Sangat Baik"', "\n";
echo "Predikat: \"Sangat Baik\"\n";Output yang Dihasilkan:
Selamat, Siti!
Poin Anda: 95
Predikat: "Sangat Baik"
Predikat: "Sangat Baik"Dua baris pertama memperlihatkan interpolation $nama dan $poin — pembahasan tuntasnya menjadi topik Chapter String Interpolation
tersendiri. Dua baris terakhir menghasilkan keluaran yang sama dengan dua jalan berbeda: single-quoted tidak memerlukan escape apa pun untuk memuat tanda kutip ganda, sedangkan double-quoted harus menulis \" agar tanda tersebut tidak menutup string. Prinsip ini menjadi strategi andalan pada section berikutnya.
Menyisipkan Tanda Kutip dan Tanda Dolar #
Kesimpulan praktis dari perilaku di atas: untuk memuat tanda kutip, pilih jenis kutip yang berlawanan dengan pembuka stringnya. Tanda dolar justru sebaliknya — di dalam double-quoted, tanda tersebut berarti khusus sehingga perlu di-escape dengan \$ bila Anda ingin mencetaknya literal:
<?php
$harga = 100;
echo 'Harga: $' . $harga . "\n";
echo "Harga: \$$harga\n";Output yang Dihasilkan:
Harga: $100
Harga: $100Baris pertama memakai single-quoted untuk teks statis Harga: $, lalu menyambung nilai $harga dengan operator titik — dolar tidak punya makna khusus di single-quoted. Baris kedua mengerjakan semuanya di dalam satu double-quoted: \$ mencetak dolar literal, lalu $harga langsung diinterpolasi menjadi 100. Kedua gaya sah; pilih yang paling terbaca bagi tim Anda.
Jebakan Escape Heksadesimal #
Ada satu jebakan double-quoted yang sering memakan korban: escape \x. Rangkaian ini membaca satu sampai dua digit heksadesimal setelahnya dan mengubahnya menjadi satu byte, bahkan ketika Anda sama sekali tidak berniat membuat escape. Perhatikan:
<?php
echo bin2hex("C:\xampp"), "\n";
echo "Jalan keluar: ", "C:\\xampp\\htdocs", "\n";Output yang Dihasilkan:
433a0a6d7070
Jalan keluar: C:\xampp\htdocsBaris pertama seharusnya berisi C:\xampp, tetapi bin2hex() membongkar kebenarannya: byte ketiga adalah 0a — line feed — bukan backslash. Penyebabnya, \xa dikenali sebagai escape heksadesimal (huruf a adalah digit heksa), sehingga string menjadi C: + line feed + mpp. Baris kedua menunjukkan perbaikannya: gandakan backslash (\\x) agar tercetak literal.
Perbedaan Kinerja #
Ada anggapan lama bahwa single-quoted “jauh lebih cepat” daripada double-quoted. Fakta teknisnya lebih halus: string single-quoted memang sedikit lebih murah saat kompilasi karena parser tidak perlu memindai tanda dolar dan escape, sedangkan double-quoted turut menyimpan hasil interpolasi statis ke dalam bytecode. Namun kompilasi hanya terjadi sekali — dengan OPcache yang aktif di server produksi, bytecode tersebut dipakai ulang dan keduanya identik saat eksekusi. Perbedaan yang tersisa jauh di bawah noise pengukuran.
Ringkasan #
Single-quoted hanya memproses \' dan \\ serta membiarkan $, \n, dan escape lain apa adanya; double-quoted memproses semua escape sekaligus menginterpolasi variabel. Tanda kutip lawan dapat dipakai untuk menghindari escape, tanda dolar literal memerlukan \$ pada double-quoted, dan escape \x bisa diam-diam mengubah byte tanpa Anda sadari. Perbedaan kinerja keduanya nyaris tidak relevan pada praktik modern. Berbekal perilaku kedua kutip ini, kita siap menghadapi tantangan berikutnya: teks panjang multi-baris yang canggung ditulis dengan kutip — pekerjaan yang paling pas untuk heredoc dan nowdoc.