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
<?php
$nama = "Budi";
$kota = "Bandung";

echo "Halo, $nama!\n";
echo "$nama tinggal di $kota.\n";
echo "Asal Anda $kota?\n";

Output yang Dihasilkan:

text
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
<?php
$berat = 5;

echo "Berat: $beratkg\n";
echo "Berat: {$berat}kg\n";

Output yang Dihasilkan:

text

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: 5kg

Baris 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
<?php
$produk = ["nama" => "Gula Pasir", "harga" => 16500];

echo "Produk: $produk[nama]\n";
echo "Harga: Rp$produk[harga]\n";

Output yang Dihasilkan:

text
Produk: Gula Pasir
Harga: Rp16500

Kedua 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
<?php
$produk = ["nama" => "Gula Pasir"];

echo "Produk: $produk['nama']\n";

Output yang Dihasilkan:

text

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 4

Tanda 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
<?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:

text
Berat: 5kg
Produk: Gula Pasir
Berat kemasan: 1000 gram

Di 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
<?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:

text
Produk: Kopi Gayo
Harga: Rp85000

Property 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
<?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:

text

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 Gayo

Baris 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
<?php
$nama = "budi santoso";

echo "A: {strlen($nama)}\n";

Output yang Dihasilkan:

text
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
<?php
$berat = 5;

echo "Berat: ${berat}kg\n";

Output yang Dihasilkan:

text

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: 5kg

Nilainya 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.

Referensi #