Hampir semua data yang lewat dari aplikasi ke pengguna berwujud teks: judul artikel, pesan selamat datang, alamat email, sampai pesan error. PHP menyediakan string sebagai tipe untuk menampung teks tersebut, dan bahasa ini menawarkan empat cara penulisan yang dikenal sebagai empat keluarga sintaks string. Pada chapter ini kita akan memetakan keempat keluarga tersebut, memahami model internal string PHP sebagai deretan byte, dan mengenal escape sequence untuk menyisipkan karakter khusus.
Empat Keluarga Sintaks String #
PHP mengenal empat cara menulis string literal: single-quoted, double-quoted, heredoc, dan nowdoc. Keempatnya menghasilkan tipe data yang sama persis — sebuah string — sehingga hasilnya dapat dibandingkan dengan operator ===. Perbedaannya terletak pada seberapa banyak pemrosesan yang dilakukan PHP terhadap isi di dalamnya.
| Sintaks | Contoh awal | Pemrosesan isi | Chapter pembahasan |
|---|---|---|---|
| Single-quoted | 'teks' | Minimal: hanya \' dan \\ | Single-Quoted dan Double-Quoted Strings |
| Double-quoted | "teks" | Escape sequence + interpolation variabel | Single-Quoted dan Double-Quoted Strings |
| Heredoc | <<<EOT … EOT; | Sama seperti double-quoted, untuk teks panjang | Heredoc dan Nowdoc |
| Nowdoc | <<<'EOT' … EOT; | Sama seperti single-quoted, tanpa pemrosesan apa pun | Heredoc dan Nowdoc |
Mari kita buktikan bahwa keempat keluarga menghasilkan nilai string yang identik ketika isinya sama:
<?php
$nama = "Budi";
$satu = 'Halo, Budi!';
$dua = "Halo, Budi!";
$tiga = <<<SALAM
Halo, Budi!
SALAM;
$empat = <<<'SALAM'
Halo, Budi!
SALAM;
var_dump($satu === $dua);
var_dump($satu === $tiga);
var_dump($satu === $empat);Output yang Dihasilkan:
bool(true)
bool(true)
bool(true)Ketiga perbandingan mengembalikan bool(true) karena keempat variabel menampung urutan byte yang sama. Bagi PHP, cara penulisan hanya memengaruhi bagaimana teks diproses saat skrip dikompilasi, bukan jenis data yang dihasilkan. Artinya, kita bebas memilih keluarga sintaks yang paling nyaman untuk tiap keadaan tanpa khawatir tipe data berubah.
String PHP adalah Deretan Byte #
Berbeda dengan bahasa yang menyimpan string sebagai deretan character, PHP menyimpan string sebagai deretan byte. PHP tidak peduli apakah byte-byte tersebut merepresentasikan teks ASCII, UTF-8, atau data biner — bahasa ini sama sekali tidak melekatkan informasi encoding pada nilai string. Kesadaran akan encoding sepenuhnya menjadi tanggung jawab programmer.
Konsekuensi model byte dapat kita lihat langsung dengan mengakses string menggunakan kurung siku, yang membaca byte pada posisi tertentu:
<?php
$kota = "São Paulo";
echo $kota[0], "\n";
echo bin2hex($kota[1]), "\n";
echo strlen($kota), "\n";Output yang Dihasilkan:
S
c3
10Mari kita bedah keluaran di atas:
$kota[0]mengembalikan byte pada posisi nol, yaitu hurufS.bin2hex($kota[1])mengubah byte kedua menjadi notasi heksadesimal. Hurufãdalam UTF-8 tersusun dari dua byte (c3dana3), dan yang dikembalikan$kota[1]adalah byte pertamanya saja:c3. Fungsibin2hex()sendiri hanya berperan sebagai alat bantu agar byte mentah terlihat oleh mata.strlen($kota)mengembalikan10— jumlah byte, bukan jumlah karakter yang kita lihat (sembilan huruf plus satu spasi, tetapiãdihitung dua byte).
Escape Sequence #
Escape sequence adalah rangkaian penanda yang dimulai dengan backslash (\) untuk menyisipkan karakter yang tidak bisa atau tidak praktis diketik langsung: baris baru, tab, tanda kutip, sampai karakter Unicode. Escape sequence hanya diproses pada double-quoted string dan heredoc; single-quoted string hanya mengenal \' dan \\, sedangkan nowdoc tidak memproses satu pun.
Tabel berikut merangkum escape sequence yang didukung PHP:
| Rangkaian | Arti | Nilai |
|---|---|---|
\n | Line feed (baris baru) | 0x0A |
\r | Carriage return | 0x0D |
\t | Tab horizontal | 0x09 |
\v | Tab vertikal | 0x0B |
\f | Form feed | 0x0C |
\e | Karakter escape | 0x1B |
\\ | Backslash itu sendiri | 0x5C |
\$ | Tanda dolar literal (mencegah interpolasi) | 0x24 |
\" | Tanda kutip ganda | 0x22 |
\101 | Karakter dari kode oktal (maksimal 3 digit) | bebas |
\x41 | Karakter dari kode heksadesimal (1–2 digit) | bebas |
\u{2026} | Codepoint Unicode, dikodekan sebagai UTF-8 | bebas |
Mari kita lihat escape sequence yang paling sering dipakai dalam aksi:
<?php
echo "Baris pertama\nBaris kedua\n";
echo "Nama\tKota\tPoin\n";
echo "Harga: \$100\n";
echo "Kutip: \"diskon istimewa\"\n";
echo "Path Windows: C:\\xampp\\htdocs\n";
echo "Panjang\u{2026}\n";Output yang Dihasilkan:
Baris pertama
Baris kedua
Nama Kota Poin
Harga: $100
Kutip: "diskon istimewa"
Path Windows: C:\xampp\htdocs
Panjang…Perhatikan beberapa hal dari contoh di atas: \n memindahkan keluaran ke baris baru sehingga satu pernyataan echo dapat mencetak dua baris; \t menyisipkan tab yang berguna untuk keluaran berkolom; \$ dibutuhkan karena tanda dolar di dalam double-quoted string memiliki arti khusus (memicu interpolation, dibahas pada chapter String Interpolation); dan \u{2026} menghasilkan karakter elipsis … — PHP menerjemahkan codepoint Unicode tersebut menjadi tiga byte UTF-8 di dalam string.
Escape yang tidak dikenali, misalnya \q, tidak menyebabkan error — PHP membiarkan backslash dan huruf tersebut apa adanya. Perilaku longgar ini terasa memudahkan, tetapi bisa menyembunyikan kesalahan ketik seperti "\n" yang tertukar "\m", sehingga baris baru tidak pernah muncul.
Karakter NUL dan String Biner #
Escape \0 sampai \777 (oktal) memungkinkan string PHP menampung byte bernilai nol — karakter NUL — sesuatu yang mustahil diketik langsung dari papan ketik. Kemampuan ini membuat string PHP juga cocok menampung data biner mentah seperti isi berkas gambar. Perhatikan contoh berikut:
<?php
$data = "a\0b";
var_dump(strlen($data));Output yang Dihasilkan:
int(3)Nilai int(3) menegaskan bahwa byte NUL benar-benar menempati satu posisi di dalam string. Saat dicetak ke terminal, byte NUL tidak terlihat mata, tetapi strlen() tetap menghitungnya karena fungsi tersebut menghitung byte. Kebiasaan menguji panjang string saat berhadapan dengan data khusus seperti ini akan sering Anda perlukan ketika memvalidasi masukan atau membaca berkas biner.
Berkas contoh.php pada bagian bawah halaman merangkum seluruh contoh chapter ini dalam satu program utuh yang dapat langsung Anda jalankan.
Ringkasan #
PHP menyediakan empat keluarga sintaks string — single-quoted, double-quoted, heredoc, dan nowdoc — yang semuanya menghasilkan tipe data string yang sama, dibedakan oleh seberapa jauh isi diproses. String PHP tersimpan sebagai deretan byte tanpa informasi encoding, dan escape sequence memberi jalan menyisipkan karakter khusus mulai dari baris baru hingga codepoint Unicode. Dengan peta besar ini di tangan, kita siap membedah keluarga pertama yang paling sering dipakai sehari-hari: perbedaan perilaku single-quoted dan double-quoted pada chapter berikutnya.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
contoh.php
Unduh berkas<?php
// contoh.php — rangkuman Chapter "String Syntax"
// Jalankan dengan: php contoh.php
echo "== Empat keluarga sintaks ==\n";
$nama = "Budi";
$satu = 'Halo, Budi!';
$dua = "Halo, Budi!";
$tiga = <<<SALAM
Halo, Budi!
SALAM;
$empat = <<<'SALAM'
Halo, Budi!
SALAM;
var_dump($satu === $dua, $satu === $tiga, $satu === $empat);
echo "\n== String adalah deretan byte ==\n";
$kota = "São Paulo";
echo $kota[0], "\n";
echo bin2hex($kota[1]), "\n";
echo strlen($kota), "\n";
echo "\n== Escape sequence ==\n";
echo "Baris pertama\nBaris kedua\n";
echo "Nama\tKota\tPoin\n";
echo "Harga: \$100\n";
echo "Kutip: \"diskon istimewa\"\n";
echo "Path Windows: C:\\xampp\\htdocs\n";
echo "Panjang\u{2026}\n";
echo "\n== Karakter NUL ==\n";
$data = "a\0b";
printf("strlen(\"a\\0b\") = %d\n", strlen($data));