String adalah tipe data yang menyimpan rangkaian karakter, dan hampir setiap program PHP memanipulasinya, mulai dari menyusun pesan sampai membentuk halaman HTML. Topik ini membahas empat cara mendefinisikan string beserta perbedaan penafsirannya, mekanisme interpolasi variabel, sintaks heredoc untuk teks beberapa baris, dan fungsi-fungsi string yang paling sering digunakan sehari-hari.
Tanda kutip tunggal dan ganda#
Tanda kutip tunggal dan tanda kutip ganda sama-sama mendefinisikan string, tetapi keduanya tidak sederajat dalam menafsirkan isinya. String bertanda kutip tunggal memperlakukan hampir seluruh isi sebagai karakter biasa, dan nama variabel di dalamnya tidak diganti nilainya. String bertanda kutip ganda menafsirkan karakter escape seperti \n untuk baris baru dan \t untuk tab, serta mengganti nama variabel dengan nilainya.
Aturan karakter escape juga berbeda. Dalam tanda kutip tunggal, hanya dua urutan yang dikenali, yaitu \' untuk menyisipkan tanda kutip tunggal dan \\ untuk menyisipkan garis miring terbalik. Urutan lain dilewatkan apa adanya. Dalam tanda kutip ganda, seluruh urutan standar dikenali, sehingga penulisannya lebih lentur tetapi juga lebih mudah menyebabkan kekeliruan bila teksnya memuat tanda dolar yang memang dimaksud sebagai karakter biasa.
<?php
$buah = "apel";
echo 'Tanda kutip tunggal: $buah tak diganti' . PHP_EOL;
echo "Tanda kutip ganda: $buah diganti" . PHP_EOL;
echo "Baris pertama\nBaris kedua" . PHP_EOL;
echo 'Karakter \n tetap dua karakter' . PHP_EOL;Tanda kutip tunggal: $buah tak diganti
Tanda kutip ganda: apel diganti
Baris pertama
Baris kedua
Karakter \n tetap dua karakterKeluaran di atas mempertegas perbedaannya. Baris pertama mencetak $buah apa adanya, sedangkan baris kedua menggantinya dengan apel. Baris ketiga memperlihatkan \n yang benar-benar memindahkan teks berikutnya ke baris baru, sedangkan baris keempat membuktikan tanda kutip tunggal menyerahkan \n sebagai dua karakter biasa.
Interpolasi variabel#
Interpolasi adalah penggantian nama variabel oleh nilainya secara langsung di dalam string bertanda kutip ganda. PHP membaca nama variabel hingga karakter yang tidak lagi sah sebagai kelanjutan nama, lalu menggantinya dengan nilai yang tersimpan. Karena batas nama dibaca secara otomatis, interpolasi sederhana cukup dilakukan dengan menulis nama variabel langsung di dalam teks.
Kesulitan muncul ketika teks setelah variabel tersambung tanpa spasi. Bila nama variabel menjadi ambigu, bentuk kurung kurawal seperti {$kode} menutup nama variabel secara eksplisit sehingga PHP berhenti membaca pada tempat yang tepat. Bentuk kurung kurawal juga membuka interpolasi pada akses yang lebih kompleks, misalnya elemen array atau properti objek, yang dibahas pada modul masing-masing.
<?php
$kode = "A-12";
$jumlah = 3;
echo "Nomor pesanan: $kode" . PHP_EOL;
echo "Kode: {$kode}J" . PHP_EOL;
echo "Total: " . ($jumlah * 2500) . " rupiah" . PHP_EOL;Nomor pesanan: A-12
Kode: A-12J
Total: 7500 rupiahBaris kedua pada contoh memperlihatkan kebutuhan kurung kurawal. Tanpa kurung kurawal, PHP membaca nama variabel sebagai $kodeJ, yaitu variabel yang tidak ada, dan hasil interpolasinya kosong. Baris ketiga menegaskan bahwa ekspresi seperti operasi perkalian tidak dapat diinterpolasi, sehingga hasilnya dihitung di luar string dan digabungkan dengan operator titik.
Heredoc dan nowdoc#
Heredoc menyediakan cara menulis string beberapa baris tanpa menggabungkan banyak tanda kutip dan titik. Sintaksnya dimulai dengan <<< diikuti sebuah pengenal, dilanjutkan isi string pada baris-baris berikutnya, dan ditutup dengan pengenal yang sama pada baris tersendiri. Aturan penafsirannya sama dengan tanda kutip ganda, termasuk interpolasi variabel dan karakter escape. Pasangannya bernama nowdoc, yaitu bentuk dengan pengenal yang diberi tanda kutip tunggal, dan aturannya sama dengan tanda kutip tunggal, yakni tanpa penafsiran apa pun.
<?php
$kode = "X-7";
$laporan = <<<TEKS
Laporan unit $kode
Status: siap diuji
TEKS;
echo $laporan . PHP_EOL;
$templat = <<<'TEKS'
Unit $kode belum diproses
TEKS;
echo $templat . PHP_EOL;Laporan unit X-7
Status: siap diuji
Unit $kode belum diprosesKeluaran di atas menunjukkan perbedaan keduanya secara langsung. Variabel $kode terinterpolasi pada heredoc dan tetap utuh pada nowdoc. Sejak PHP 7.3, baris penutup boleh menjorok mengikuti lekukan kode di sekitarnya, sehingga heredoc tetap rapi ketika ditulis di dalam fungsi maupun kelas. Bentuk ini cocok untuk templat pesan, potongan HTML, atau teks konfigurasi yang isinya memuat banyak baris.
Fungsi string yang sering dipakai#
Pustaka bawaan PHP menyediakan ratusan fungsi string, dan enam fungsi berikut mencakup kebutuhan yang paling sering muncul. Fungsi strlen mengembalikan panjang string dalam byte, sedangkan mb_strlen mengembalikan panjang dalam karakter dengan memperhitungkan penyandian multibyte seperti UTF-8. Fungsi strtoupper mengubah huruf menjadi kapital, trim memotong spasi pada awal dan akhir string, dan str_replace menggantikan seluruh kemunculan sebuah teks dengan teks penggantinya. Fungsi sprintf membentuk string menurut pola tertentu, dengan penanda %s untuk string dan %d untuk bilangan bulat.
<?php
echo strlen("Kopi") . PHP_EOL;
echo strlen("Kafé") . PHP_EOL;
echo mb_strlen("Kafé") . PHP_EOL;
echo strtoupper("kopi") . PHP_EOL;
echo trim(" teks berjela ") . "|" . PHP_EOL;
echo str_replace("kopi", "teh", "Es kopi hangat") . PHP_EOL;
echo sprintf("%s: %d unit", "Stok", 24) . PHP_EOL;4
5
4
KOPI
teks berjela|
Es teh hangat
Stok: 24 unitTiga baris pertama memuat perbandingan penting. String "Kafé" memuat lima byte karena karakter é tersimpan dalam dua byte pada UTF-8, tetapi hanya empat karakter menurut mb_strlen. Perbedaan byte dan karakter ini menjadi sumber kesalahan yang dibahas pada bagian berikutnya. Fungsi trim memotong spasi di kedua ujung tanpa menyentuh spasi di tengah, dan tanda garis vertikal pada keluaran hanya menjadi penanda batas agar pemotongannya terlihat.
Kesalahan umum#
Tiga kesalahan berikut paling sering muncul saat memanipulasi string.
strlendigunakan untuk teks berpenyandian UTF-8 dan hasilnya dianggap sebagai jumlah karakter. Padahal yang dihitung adalah byte, sehingga teks dengan karakter é atau karakter non-Latin lain terhitung lebih panjang. Perbaikannya adalah menggunakanmb_strlenuntuk teks yang berpenyandian UTF-8.- Hasil
strposdiperiksa dengan perbandingan lemah. Posisi pertama bernilai 0, dan nilai 0 dianggap false pada perbandingan lemah, sehingga pencarian yang berhasil terbaca sebagai gagal. Perbaikannya adalah membandingkan dengan!== false. str_replacedianggap mengubah string asalnya. String di PHP tidak berubah nilai (immutable), dan fungsi tersebut mengembalikan string baru. Perbaikannya adalah menyimpan hasil pemanggilan ke variabel.
<?php
$posisi = strpos("Kelapa muda", "K");
var_dump($posisi);
if ($posisi !== false) {
echo "Karakter K ditemukan" . PHP_EOL;
}
$posisiLain = strpos("Kelapa muda", "muda");
var_dump($posisiLain);int(0)
Karakter K ditemukan
int(7)Contoh di atas menegaskan alasan penggunaan !== false. Pencarian K menghasilkan 0 karena huruf itu memang berada pada posisi pertama, dan pembanding ketat tetap menganggapnya ditemukan. Pencarian muda menghasilkan 7 karena itulah posisi kemunculan pertamanya.
Ringkasan#
- Tanda kutip tunggal menyerahkan isi string hampir apa adanya, sedangkan tanda kutip ganda menafsirkan karakter escape dan mengganti variabel dengan nilainya.
- Interpolasi membaca nama variabel sampai batas nama, dan bentuk kurung kurawal menutup nama variabel ketika teks berikutnya tersambung tanpa spasi.
- Heredoc menulis string beberapa baris dengan penafsiran seperti tanda kutip ganda, sedangkan nowdoc dengan pengenal berkutip tunggal menulisnya tanpa penafsiran.
strlenmenghitung byte sedangkanmb_strlenmenghitung karakter, dan hasilstrposdiperiksa dengan!== falseagar posisi 0 tidak terbaca gagal.
Referensi#
- Strings — PHP Manual — Dokumentasi lengkap sintaks string, dari tanda kutip hingga heredoc dan nowdoc.
- strlen — PHP Manual — Dokumentasi fungsi penghitung panjang string dalam byte.
- mb_strlen — PHP Manual — Dokumentasi fungsi penghitung panjang string menurut karakter.
- sprintf — PHP Manual — Daftar penanda format untuk membentuk string menurut pola.
- strpos — PHP Manual — Dokumentasi pencarian posisi teks beserta penanganan nilai kembalian false.