Nama pengguna, alamat email, isi pesan — sebagian besar data di aplikasi web berupa teks. Tipe string adalah wadah PHP untuk teks tersebut: deretan byte yang merepresentasikan karakter. Pada Chapter ini kita memandang string sebagai tipe data — cara mengindeks byte-nya, mengukur panjangnya, dan bagaimana PHP mengonversinya menjadi angka. Sintaks penulisan string yang lengkap (kutip tunggal vs ganda, heredoc, escaping) mendapat section tersendiri, jadi di sini kita fokus pada sisi tipenya.

String sebagai Tipe Data #

String ditulis di antara tanda kutip — tunggal atau ganda. Keduanya sudah kita pakai di Chapter Variabel : kutip ganda menggantikan variabel dengan nilainya (interpolation), kutip tunggal mencetak apa adanya. Fungsi var_dump() menampilkan panjang string di samping isinya:

php
<?php
$nama = "Budi Santoso";
$salam = 'Selamat pagi';

var_dump($nama, $salam);
var_dump(is_string($nama));

Output yang Dihasilkan:

text
string(12) "Budi Santoso"
string(12) "Selamat pagi"
bool(true)

Angka 12 pada string(12) adalah panjang string dalam satuan byte — informasi yang akan penting sebentar lagi. Pemeriksaan tipe menggunakan is_string(), dan gettype() akan mengembalikan "string" untuk keduanya; jenis kutip yang Anda pilih tidak mengubah tipe datanya.

String adalah Array dari Byte #

PHP memungkinkan Anda membaca satu karakter string menggunakan kurung siku persis seperti membaca elemen array. Indeks dimulai dari nol, dan indeks negatif membaca dari belakang:

php
<?php
$kalimat = "Belajar PHP";

var_dump($kalimat[0]);
var_dump($kalimat[8]);
var_dump($kalimat[-1]);

Output yang Dihasilkan:

text
string(1) "B"
string(1) "P"
string(1) "P"

Indeks 0 mengambil B, indeks 8 mengambil P pertama dari kata PHP, dan -1 mengambil karakter terakhir P. Penulisan pada posisi tertentu juga bisa dilakukan dengan cara yang sama:

php
<?php
$kata = "php";
$kata[0] = "P";
var_dump($kata);

Output yang Dihasilkan:

text
string(3) "Php"

Meski bisa diindeks, string bukan array sungguhan — string tetap satu nilai tunggal, dan kurung siku hanyalah pintu menuju byte di posisi tertentu. Pada kenyataannya, mekanisme ini jarang dipakai untuk teks; fungsi string seperti str_contains() atau substr() lebih ekspresif dan aman.

Panjang String: strlen vs mb_strlen #

Katakan panjang, dan masalah muncul: satu karakter tidak selalu sama dengan satu byte. Huruf ã pada kata “São” membutuhkan dua byte dalam encoding UTF-8, sementara huruf a hanya satu. Dua fungsi panjang menghitung dengan cara berbeda:

php
<?php
$kota = "São Paulo";
$sapaan = "こんにちは";

var_dump(strlen($kota), mb_strlen($kota));
var_dump(strlen($sapaan), mb_strlen($sapaan));

Output yang Dihasilkan:

text
int(10)
int(9)
int(15)
int(5)

Untuk "São Paulo", strlen() menghitung 10 byte sementara mb_strlen() menghitung 9 karakter. Untuk teks Jepang "こんにちは" perbedaannya makin lebar: 15 byte, tetapi hanya 5 karakter. Fungsi mb_* (multibyte, dari ekstensi mbstring) bekerja berdasarkan karakter, bukan byte.

String Numerik dan Konversi ke Angka #

String dan angka saling bertukar bentuk lebih sering daripada yang Anda kira: data dari formulir HTML, baris berkas CSV, dan isi JSON selalu tiba sebagai string. PHP secara otomatis mengonversi string numerik saat dipakai dalam operasi angka:

php
<?php
var_dump("5" + 3);
var_dump("3.5" + 1);
var_dump(is_numeric("42"), is_numeric("42.5"), is_numeric("1e3"));
var_dump(is_numeric("42 budi"), is_numeric(""));

Output yang Dihasilkan:

text
int(8)
float(4.5)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)

String "5" dijumlahkan dengan 3 menghasilkan int(8), dan "3.5" dengan 1 menghasilkan float(4.5). Fungsi is_numeric() memastikan sebuah string berisi angka yang sepenuhnya valid — string campuran seperti "42 budi" tidak lolos. Bila string hanya diawali angka, cast (int) atau (float) mengambil bagian angkanya di depan dan mengabaikan sisanya:

php
<?php
var_dump((int)"42", (int)"5budi", (int)"budi");
var_dump((float)"3.14 kilo");

Output yang Dihasilkan:

text
int(42)
int(5)
int(0)
float(3.14)

Cast (int)"5budi" menghasilkan 5 — bagian angka di awal diambil, sisanya dibuang tanpa keluhan. String tanpa angka sama sekali seperti "budi" menjadi 0. Perilaku ini terasa praktis, tetapi menyimpan risiko: kesalahan ketik atau data kotor bisa berubah diam-diam menjadi angka yang salah. Ketika string yang tidak diawali angka dipakai langsung dalam operasi aritmetika ("budi" + 1), PHP 8 bahkan menghentikan program dengan TypeError — aturan lengkapnya kita bedah pada Chapter Type Juggling .

Ringkasan #

String adalah deretan byte yang dapat diindeks dari depan (mulai nol) atau belakang (mulai -1), dengan strlen() menghitung byte dan mb_strlen() menghitung karakter. String numerik otomatis berubah menjadi angka dalam konteks aritmetika, dan cast mengambil bagian angka di awal string. Tipe data berikutnya jauh lebih sederhana karena hanya punya dua nilai, tetapi mengendalikan hampir seluruh alur logika program Anda: boolean.

Referensi #