Interpolation adalah fitur yang berkali-kali kita pakai diam-diam sejak Chapter Variabel
: menulis $nama di dalam string bertanda kutip ganda, lalu PHP menggantinya dengan nilai variabel tersebut. Fitur ini hanya aktif pada double-quoted string dan heredoc — single-quoted dan nowdoc membiarkan tanda dolar apa adanya. Pada chapter ini kita bedah aturan mainnya secara utuh: sintaks sederhana dengan tanda dolar, jebakan batas identifier, sintaks kompleks dengan kurung kurawal, hingga dua batas tegas berupa pemanggilan fungsi dan gaya lama ${var} yang kini berstatus deprecated.
Interpolasi Sederhana dengan Tanda Dolar #
Saat parser membaca tanda $ di dalam double-quoted string, parser melanjutkan membaca karakter selama rangkaiannya masih membentuk nama variabel yang sah: huruf, angka, dan garis bawah. Begitu bertemu karakter lain, nama variabel dianggap selesai dan sisanya diperlakukan teks biasa:
<?php
$nama = "Budi";
$kota = "Bandung";
echo "Halo, $nama!\n";
echo "$nama tinggal di $kota.\n";
echo "Asal Anda $kota?\n";Output yang Dihasilkan:
Halo, Budi!
Budi tinggal di Bandung.
Asal Anda Bandung?Ketiga baris berjalan lancar karena !, spasi, titik, dan tanda tanya bukan karakter identifier — masing-masing menutup nama variabel tepat waktu. Mekanisme “baca selengkap mungkin” inilah yang menjadi sumber jebakan pada section berikutnya.
Batas Identifier dan Solusi Kurung Kurawal #
Apa yang terjadi bila karakter tepat setelah variabel justru huruf yang sah? PHP membacanya sebagai kelanjutan nama variabel — variabel yang tidak pernah Anda definisikan:
<?php
$berat = 5;
echo "Berat: $beratkg\n";
echo "Berat: {$berat}kg\n";Output yang Dihasilkan:
Warning: Undefined variable $beratkg in /home/z/my-project/php-course/content/php/string-dan-text-processing/string-interpolation/.verify_tmp.php on line 4
Berat:
Berat: 5kgBaris pertama memicu Warning: Undefined variable $beratkg dan mencetak Berat: kosong: niatnya menyambung sufiks kg, tetapi parser menganggap $beratkg satu nama utuh. Baris kedua menyelesaikannya dengan sintaks kompleks: bungkus variabel dalam { dan }, lalu batasnya menjadi eksplisit — {$berat} lalu kg. Inilah alasan contoh-contoh heredoc pada chapter sebelumnya selalu memakai bentuk kurung kurawal.
Elemen Array: Kunci Tanpa Kutip #
Interpolasi sederhana juga menjangkau elemen array dengan bentuk $array[kunci] — tetapi kuncinya harus ditulis tanpa tanda kutip:
<?php
$produk = ["nama" => "Gula Pasir", "harga" => 16500];
echo "Produk: $produk[nama]\n";
echo "Harga: Rp$produk[harga]\n";Output yang Dihasilkan:
Produk: Gula Pasir
Harga: Rp16500Kedua baris berhasil meskipun nama dan harga tertulis tanpa kutip — dalam posisi ini PHP memperlakukan kunci sebagai string literal, bukan konstanta. Nyaman, tetapi rapuh: begitu kunci perlu kutip, spasi, atau ekspresi, sintaks sederhana menolaknya dengan keras:
<?php
$produk = ["nama" => "Gula Pasir"];
echo "Produk: $produk['nama']\n";Output yang Dihasilkan:
Parse error: syntax error, unexpected string content "", expecting "-" or identifier or variable or number in /home/z/my-project/php-course/content/php/string-dan-text-processing/string-interpolation/.verify_tmp.php on line 4Tanda kutip tunggal pada ['nama'] membuat parser tersandung di tengah string dan menghasilkan parse error — perhatikan pesannya: unexpected string content. Kesalahan seperti ini tidak bisa ditangkap dengan try-catch karena terjadi sebelum program berjalan; satu-satunya jalan keluar adalah membenahi sintaksnya.
Sintaks Kompleks: Ekspresi dalam Kurung Kurawal #
Sintaks kompleks menyelesaikan semua keterbatasan di atas. Aturannya satu: buka dengan { yang langsung diikuti tanda $, tulis ekspresi apa pun yang biasa Anda tulis di luar string, lalu tutup dengan }:
<?php
$berat = 5;
$produk = ["nama" => "Gula Pasir", "berat" => 1000];
echo "Berat: {$berat}kg\n";
echo "Produk: {$produk['nama']}\n";
echo "Berat kemasan: {$produk['berat']} gram\n";Output yang Dihasilkan:
Berat: 5kg
Produk: Gula Pasir
Berat kemasan: 1000 gramDi dalam kurung kurawal, kunci boleh dikutip ({$produk['nama']}), dan nilai tetap bisa menempel huruf ({$berat}kg). Bentuk yang sama juga menjangkau property object lewat operator ->:
<?php
class Produk
{
public string $nama = "Kopi Gayo";
public int $harga = 85000;
}
$produk = new Produk();
$label = <<<LABEL
Produk: {$produk->nama}
Harga: Rp{$produk->harga}
LABEL;
echo $label, "\n";Output yang Dihasilkan:
Produk: Kopi Gayo
Harga: Rp85000Property nama dan harga dibaca dari object $produk lalu diganti ke dalam teks — konsep property dan operator -> telah kita kenal pada Chapter Objects
. Di dalam heredoc, aturan interpolasinya persis sama dengan double-quoted, sehingga label produk di atas tersusun rapi tanpa satu pun operator penggabung.
Method Bekerja Hanya dengan Kurung Kurawal #
Pemanggilan method adalah kasus yang membedakan kedua sintaks secara mencolok. Tanpa kurung kurawal, tanda kurung pembuka method diperlakukan teks biasa dan PHP malah mencari property bernama sama:
<?php
class Produk
{
public function getNama(): string
{
return "Kopi Gayo";
}
}
$produk = new Produk();
echo "Tanpa kurawal: $produk->getNama()\n";
echo "Dengan kurawal: {$produk->getNama()}\n";Output yang Dihasilkan:
Warning: Undefined property: Produk::$getNama in /home/z/my-project/php-course/content/php/string-dan-text-processing/string-interpolation/.verify_tmp.php on line 12
Tanpa kurawal: ()
Dengan kurawal: Kopi GayoBaris pertama memicu Warning: Undefined property: Produk::$getNama — PHP membaca $produk->getNama sebagai property yang tidak ada, mencetak nilai kosong, lalu menuliskan () apa adanya. Baris kedua memanggil method sungguhan karena seluruh ekspresi {$produk->getNama()} dievaluasi lebih dulu, lalu hasil kembalinya yang disisipkan ke string. Jadi bila nilai perlu “diproses dulu” lewat method, kurung kurawal bukan pilihan melainkan syarat.
Fungsi Tetap Diperlakukan sebagai Teks #
Satu batas terakhir tidak bisa ditembus kurung kurawal sekalipun: pemanggilan fungsi yang tidak dimulai dengan $. Kurung kurawal kompleks hanya aktif bila karakter tepat setelahnya adalah tanda dolar:
<?php
$nama = "budi santoso";
echo "A: {strlen($nama)}\n";Output yang Dihasilkan:
A: {strlen(budi santoso)}Hasilnya A: {strlen(budi santoso)} — kurung kurawal dicetak literal karena {s bukan pembuka sintaks kompleks, nama fungsi diperlakukan teks, dan hanya $nama yang diinterpolasi. Untuk menyisipkan hasil fungsi, keluarkan nilai dari string: gabungkan dengan operator titik seperti yang akan kita bahas tuntas pada Chapter String Concatenation
, atau format lewat sprintf() pada chapter formatting.
Gaya ${var} Sudah Deprecated #
Banyak kode lama memakai bentuk ${var} — dolar di dalam kurung kurawal, kebalikan dari {$var}. Sejak PHP 8.2 bentuk tersebut resmi deprecated:
<?php
$berat = 5;
echo "Berat: ${berat}kg\n";Output yang Dihasilkan:
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/z/my-project/php-course/content/php/string-dan-text-processing/string-interpolation/.verify_tmp.php on line 4
Berat: 5kgNilainya tetap tersisip dan program tetap berjalan, tetapi pesan Deprecated: Using ${var} in strings is deprecated, use {$var} instead menyertai setiap pemanggilan — PHP bahkan menyebutkan bentuk penggantinya secara langsung. Perbaikannya persis seperti pesan itu: pindahkan tanda dolar ke luar kurung, ${berat} menjadi {$berat}.
Ringkasan #
Interpolasi mengganti $var, $array[kunci], dan {$...} dengan nilai aslinya pada double-quoted string dan heredoc. Sintaks sederhana berhenti di batas identifier sehingga sufiks menempel harus memakai kurung kurawal; kunci array tanpa kutip hanya untuk bentuk paling polos, dan kunci berkutip menuntut sintaks kompleks. Property object diinterpolasi dengan {$obj->prop}, method mensyaratkan kurung kurawal penuh, sementara pemanggilan fungsi tidak mungkin diinterpolasi dan ${var} telah deprecated sejak PHP 8.2. Untuk semua kasus yang berada di luar kemampuan interpolasi inilah PHP menyediakan operator penggabung string — bintang utama chapter berikutnya.