BAB 7: STRING MANIPULATION

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
<?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
<?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 perluPerlu
KecepatanSedikit lebih lambatSedikit lebih cepat
Kapan dipakaiTeks dengan variabelTeks statis, atau banyak backslash
💡Tip

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
<?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!

?>
💡Tip

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
<?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!

?>
OperatorNamaContohHasil
.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
<?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:

SequenceArtiBerlaku di
\nNewline (baris baru)double quotes
\tTab horizontaldouble quotes
\\Backslash literalkeduanya
\"Double quotedouble quotes
\'Single quotesingle quotes
\$Dollar signdouble quotes
\rCarriage returndouble quotes
\u{...}Karakter Unicode (PHP 7+)double quotes
php
<?php

// \u{} untuk karakter unicode (emoji dsb)
echo "\u{1F600}";  // 😀
echo "\u{1F680}";  // 🚀

?>
⚠️Perhatian

\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
<?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!

?>
⚠️Perhatian

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
<?php

$html = <<<HTML
<div class="card">
    <h1>Title</h1>
    <p>Content here</p>
</div>
HTML;

echo $html;

?>

Kelebihan heredoc:

  1. Multi-baris — spasi dan baris baru dipertahankan.
  2. Bebas kutip — tanda kutip ganda tidak perlu di-escape.
  3. Interpolasi tetap jalan — seperti double quotes.
php
<?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)

?>
💡Tip

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

?>
AspekHeredoc <<<XNowdoc <<<'X'
Interpolasi✅ Ya❌ Tidak
Escape sequences✅ Diproses❌ Literal
Kapan dipakaiTeks dinamisSQL, regex, teks dengan $
Mirip denganDouble quotesSingle quotes
💡Tip

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
<?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
<?php

$kota = "Bandung";

// ❌ PHP mencari $kotaIndah — undefined variable!
// echo "Kota $kotaIndah";

// ✅
echo "Kota {$kota}Indah";  // Kota BandungIndah

?>

Mistake 3: Menutup heredoc dengan spasi

php
<?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
<?php

// ❌ Ini literal: menampilkan teks "\n"
echo 'Baris satu\nBaris dua';

// ✅ Ini baru newline sungguhan
echo "Baris satu\nBaris dua";

?>

Pro Tips

  1. Default: single quotes untuk teks statis, double quotes hanya saat ada interpolasi.
  2. Selalu pakai {$var} untuk interpolasi — aman di semua posisi.
  3. Heredoc untuk HTML/email template, nowdoc untuk SQL/regex.
  4. Hati-hati dengan karakter Unicode: gunakan mb_* functions untuk manipulasi teks multibyte.
  5. Untuk string panjang di dalam logika, gabungkan dengan implode atau heredoc — hindari rantai . yang panjang.

Exercise

  1. Buat heredoc untuk HTML table (2 baris data dengan nama dan umur yang di-interpolasi dari variabel)
  2. Apa bedanya Heredoc dan Nowdoc?
  3. Tulis kode yang menampilkan Harga: Rp 100.000 menggunakan escape \$ di double quotes.
  4. Ambil karakter ke-3 dan ke-2-dari-belakang dari string "Programmer" menggunakan index, lalu tampilkan hasilnya.
  5. Gabungkan $nama = "Sari" dan $pekerjaan = "Desainer" menjadi kalimat Sari bekerja sebagai Desainer menggunakan (a) concatenation . dan (b) interpolasi double quotes.

Summary

KonsepPoin Kunci
Single quotesLiteral, tanpa interpolasi, lebih cepat
Double quotesInterpolasi $var, escape sequences aktif
ConcatenationGabung string dengan . dan .=
Interpolasi amanPakai {$variabel} di dalam string
Escape\n, \t, \\, \", \$, \'
Index$str[0] akses karakter, mulai dari 0
HeredocMulti-baris + interpolasi
NowdocMulti-baris, murni literal (untuk SQL)

Klik tombol ini setelah menyelesaikan materi

📝

Quiz Bab 7

Uji pemahamanmu tentang String Manipulation