7-1: String Basics
Objectives
- Memahami single vs double quotes
- Escape sequences
- Heredoc dan Nowdoc
- Mengenal string interpolation
- Mengakses karakter per index
Apa Itu String?
String adalah kumpulan karakter — huruf, angka, simbol, spasi — yang mewakili teks. Di PHP, string ditulis di dalam tanda kutip:
<?php
$nama = "Andi";
$pesan = 'Halo dunia!';
$kosong = ""; // string kosong
$angka = "123"; // ini string, bukan integer!
?>
String adalah salah satu tipe data yang paling sering dipakai: nama user, alamat email, isi artikel, query SQL, sampai JSON — semuanya string. Karena itu, memahami cara kerja string di PHP adalah keterampilan wajib.
┌───────────────────────────────────────────────┐ │ "Halo, Andi!" ──-> string │ │ │ │ H a l o , A n d i ! │ │ 0 1 2 3 4 5 6 7 8 9 10 │ │ │ │ setiap karakter punya index (mulai dari 0) │ └───────────────────────────────────────────────┘
Single vs Double Quotes
Perbedaan paling mendasar: double quotes memproses variabel (interpolation), single quotes tidak — isinya ditampilkan apa adanya (literal).
<?php
$nama = "Andi";
// Double quotes - parsed
echo "Halo $nama"; // Halo Andi
// Single quotes - literal
echo 'Halo $nama'; // Halo $nama
?>
| Aspek | "..." (double) | '...' (single) |
|---|---|---|
| Interpolasi variabel | ✅ Ya | ❌ Tidak |
Escape \' | Tidak perlu | Perlu |
| Kecepatan | Sedikit lebih lambat | Sedikit lebih cepat |
| Kapan dipakai | Teks dengan variabel | Teks statis, atau banyak backslash |
Jika string tidak mengandung variabel, gunakan single quotes — lebih cepat dan lebih "jujur" bahwa tidak ada yang akan diproses.
Interpolasi dengan Kurung Kurawal
Kadang variabel berada tepat di tengah teks, dan PHP bingung menentukan batas nama variabel. Solusinya: bungkus dengan kurung kurawal {}.
<?php
$buah = "apel";
// ❌ Salah: PHP mencari variabel bernama $buahku (tidak ada)
// echo "Jus $buahku enak";
// ✅ Benar: kurung kurawal membatasi nama variabel
echo "Jus {$buah}ku enak"; // Jus apelku enak
// Juga berguna untuk property dan array
$user = ["nama" => "Budi"];
echo "Halo, {$user['nama']}!"; // Halo, Budi!
?>
Biasakan menulis {$variabel} di dalam string — lebih aman, lebih jelas, dan bekerja untuk array/object juga.
Concatenation (Penggabungan)
Selain interpolasi, string bisa digabung dengan operator titik (.):
<?php
$depan = "Andi";
$belakang = "Pratama";
// Concatenation dengan .
$nama_lengkap = $depan . " " . $belakang;
echo $nama_lengkap; // Andi Pratama
// Bisa juga digabung dengan angka (otomatis jadi string)
echo "Umur: " . 25 . " tahun"; // Umur: 25 tahun
// Assignment concatenation
$teks = "Halo";
$teks .= ", dunia!";
echo $teks; // Halo, dunia!
?>
| Operator | Nama | Contoh | Hasil |
|---|---|---|---|
. | Concatenation | "a" . "b" | "ab" |
.= | Concatenation assignment | $x = "a"; $x .= "b"; | "ab" |
Escape Sequences
Beberapa karakter tidak bisa ditulis langsung di dalam string — misalnya tanda kutip di dalam kutip, atau karakter baru (newline). Untuk itu ada escape sequences: backslash (\) diikuti karakter khusus.
<?php
// Double quotes
echo "Baris 1\nBaris 2"; // Newline
echo "Tab:\tKolom"; // Tab
echo "Path: C:\\xampp"; // Backslash
echo "Quote: \"Halo\""; // Double quote
echo "Dolar: \$100"; // Dollar sign
// Single quotes
echo 'It\'s PHP'; // Single quote
echo 'Backslash: \\\\'; // Backslash
?>
Escape sequences yang umum:
| Sequence | Arti | Berlaku di |
|---|---|---|
\n | Newline (baris baru) | double quotes |
\t | Tab horizontal | double quotes |
\\ | Backslash literal | keduanya |
\" | Double quote | double quotes |
\' | Single quote | single quotes |
\$ | Dollar sign | double quotes |
\r | Carriage return | double quotes |
\u{...} | Karakter Unicode (PHP 7+) | double quotes |
<?php
// \u{} untuk karakter unicode (emoji dsb)
echo "\u{1F600}"; // 😀
echo "\u{1F680}"; // 🚀
?>
\n dan \t HANYA bekerja di double quotes. Di single quotes, '\n' akan ditampilkan sebagai teks \n (dua karakter), bukan baris baru.
Akses Karakter per Index
String di PHP bisa diakses per karakter menggunakan index (mulai dari 0), seperti array:
<?php
$kata = "PHP";
echo $kata[0]; // P
echo $kata[1]; // H
echo $kata[2]; // P
// Index negatif: dari belakang (PHP 7.1+)
echo $kata[-1]; // P
echo $kata[-2]; // H
// Mengubah satu karakter
$kata[1] = "J";
echo $kata; // PJP
// Menambah karakter di akhir
$kata[] = "!";
echo $kata; // PJP!
?>
Akses index bekerja per byte, bukan per karakter Unicode. Untuk teks berbahasa Indonesia yang mengandung aksara seperti é atau emoji, gunakan mb_substr() — akses index biasa bisa menghasilkan karakter rusak.
Heredoc
Heredoc adalah cara menulis string multi-baris tanpa ribet dengan kutip dan newline. Sintaksnya: <<< diikuti identifier (bebas, biasanya huruf besar), isi string, lalu identifier yang sama sebagai penutup.
<?php
$html = <<<HTML
<div class="card">
<h1>Title</h1>
<p>Content here</p>
</div>
HTML;
echo $html;
?>
Kelebihan heredoc:
- Multi-baris — spasi dan baris baru dipertahankan.
- Bebas kutip — tanda kutip ganda tidak perlu di-escape.
- Interpolasi tetap jalan — seperti double quotes.
<?php
$nama = "Rina";
$umur = 21;
$profil = <<<TEKS
Nama : $nama
Umur : $umur tahun
Status: "Aktif" (kutip tidak perlu di-escape)
TEKS;
echo $profil;
// Output:
// Nama : Rina
// Umur : 21 tahun
// Status: "Aktif" (kutip tidak perlu di-escape)
?>
Heredoc sangat cocok untuk: template HTML/email, query SQL panjang, atau teks dengan banyak tanda kutip. Identifier penutup harus berada di awal baris tanpa spasi di depannya.
Nowdoc
Nowdoc seperti heredoc, tapi tanpa interpolasi — semua isinya literal. Sintaksnya: identifier diapit single quotes <<<'SQL'.
<?php
$sql = <<<'SQL'
SELECT * FROM users
WHERE name = '$variable' -- literal, tidak diparse
SQL;
echo $sql;
// Output:
// SELECT * FROM users
// WHERE name = '$variable' -- literal, tidak diparse
?>
| Aspek | Heredoc <<<X | Nowdoc <<<'X' |
|---|---|---|
| Interpolasi | ✅ Ya | ❌ Tidak |
| Escape sequences | ✅ Diproses | ❌ Literal |
| Kapan dipakai | Teks dinamis | SQL, regex, teks dengan $ |
| Mirip dengan | Double quotes | Single quotes |
Gunakan nowdoc untuk query SQL yang mengandung placeholder $1, $2, atau teks yang punya banyak $ — nowdoc mencegah PHP "menerjemahkan" hal yang tidak kamu maksud.
Common Mistakes
Mistake 1: Mengira single quotes bisa interpolasi
<?php
$nama = "Budi";
// ❌ Keliru: hasilnya literal "$nama"
echo 'Halo $nama';
// ✅
echo "Halo $nama"; // Halo Budi
echo 'Halo ' . $nama; // Halo Budi (concatenation)
?>
Mistake 2: Variabel tanpa kurung kurawal di tengah kata
<?php
$kota = "Bandung";
// ❌ PHP mencari $kotaIndah — undefined variable!
// echo "Kota $kotaIndah";
// ✅
echo "Kota {$kota}Indah"; // Kota BandungIndah
?>
Mistake 3: Menutup heredoc dengan spasi
<?php
// ❌ Error: identifier penutup harus di kolom pertama (tanpa indentasi)
// $teks = <<<TXT
// isi teks
// TXT; // spasi di depan = error!
// ✅
$teks = <<<TXT
isi teks
TXT;
?>
Mistake 4: Menggunakan \n di single quotes
<?php
// ❌ Ini literal: menampilkan teks "\n"
echo 'Baris satu\nBaris dua';
// ✅ Ini baru newline sungguhan
echo "Baris satu\nBaris dua";
?>
Pro Tips
- Default: single quotes untuk teks statis, double quotes hanya saat ada interpolasi.
- Selalu pakai
{$var}untuk interpolasi — aman di semua posisi. - Heredoc untuk HTML/email template, nowdoc untuk SQL/regex.
- Hati-hati dengan karakter Unicode: gunakan
mb_*functions untuk manipulasi teks multibyte. - Untuk string panjang di dalam logika, gabungkan dengan
implodeatau heredoc — hindari rantai.yang panjang.
Exercise
- Buat heredoc untuk HTML table (2 baris data dengan nama dan umur yang di-interpolasi dari variabel)
- Apa bedanya Heredoc dan Nowdoc?
- Tulis kode yang menampilkan
Harga: Rp 100.000menggunakan escape\$di double quotes. - Ambil karakter ke-3 dan ke-2-dari-belakang dari string
"Programmer"menggunakan index, lalu tampilkan hasilnya. - Gabungkan
$nama = "Sari"dan$pekerjaan = "Desainer"menjadi kalimatSari bekerja sebagai Desainermenggunakan (a) concatenation.dan (b) interpolasi double quotes.
Summary
| Konsep | Poin Kunci |
|---|---|
| Single quotes | Literal, tanpa interpolasi, lebih cepat |
| Double quotes | Interpolasi $var, escape sequences aktif |
| Concatenation | Gabung string dengan . dan .= |
| Interpolasi aman | Pakai {$variabel} di dalam string |
| Escape | \n, \t, \\, \", \$, \' |
| Index | $str[0] akses karakter, mulai dari 0 |
| Heredoc | Multi-baris + interpolasi |
| Nowdoc | Multi-baris, murni literal (untuk SQL) |
Klik tombol ini setelah menyelesaikan materi
Quiz Bab 7
Uji pemahamanmu tentang String Manipulation