Menghitung adalah pekerjaan paling tua milik komputer, dan pola “tambah satu” atau “kurangi satu” muncul di mana-mana: nomor urut faktur, penghitung percobaan login, indeks perulangan. PHP menyediakan operator khusus untuk keduanya: ++ (increment) dan -- (decrement). Keduanya terlihat remeh, tetapi menyimpan dua jebakan klasik: perbedaan penempatan tanda ($a++ vs ++$a) yang mengubah nilai hasil ekspresi, serta perilaku khusus pada null dan string. Pada Chapter ini kita akan membedah keduanya sampai ke detailnya.
Menambah dan Mengurangi Satu #
Bentuk paling sederhana, ++ menambah nilai variabel sebanyak satu dan -- menguranginya satu. Ketika ekspresinya berdiri sendiri sebagai statement, posisi tanda (depan atau belakang) tidak membuat perbedaan:
<?php
$counter = 10;
$counter++;
echo $counter . "\n";
$counter--;
echo $counter . "\n";
++$counter;
echo $counter . "\n";
--$counter;
echo $counter . "\n";Output yang Dihasilkan:
11
10
11
10Nilai $counter bergerak 10 → 11 → 10 → 11 → 10 sesuai urutan operasi. Statement $counter++; pada dasarnya sama dengan $counter = $counter + 1;, hanya lebih ringkas dan lebih lazim dipakai. Perbedaan nyata baru muncul ketika hasil ekspresinya ikut dipakai — itulah topik bagian berikutnya.
Post-Increment dan Pre-Increment #
Operator increment dan decrement mengembalikan nilai, dan posisi tanda menentukan nilai mana yang dikembalikan. Bentuk belakang ($a++, post-increment) mengembalikan nilai lama sebelum ditambah; bentuk depan (++$a, pre-increment) mengembalikan nilai baru setelah ditambah:
<?php
$a = 5;
$b = $a++;
echo "a = $a, b = $b\n";
$c = 5;
$d = ++$c;
echo "c = $c, d = $d\n";
$e = 5;
$f = $e--;
echo "e = $e, f = $f\n";
$g = 5;
$h = --$g;
echo "g = $g, h = $h\n";Output yang Dihasilkan:
a = 6, b = 5
c = 6, d = 6
e = 4, f = 5
g = 4, h = 4Mari kita bedah baris demi baris:
- Baris 3 (
$b = $a++;): nilai$a(yaitu5) disalin dulu ke$b, baru$anaik menjadi6. Hasil:a = 6, b = 5. - Baris 7 (
$d = ++$c;): urutannya terbalik —$cnaik dulu menjadi6, baru nilainya disalin ke$d. Hasil:c = 6, d = 6. - Baris 11 dan 15: pasangan decrement berperilaku persis sama; posisi tanda menentukan apakah nilai lama atau nilai baru yang tersalin.
Cara mengingatnya: letak tanda menunjukkan kapan penambahan terjadi relatif terhadap pengambilan nilai. $a++ — tanda di belakang, “ambil dulu, tambah belakangan”; ++$a — tanda di depan, “tambah dulu, baru ambil”. Dalam praktik, gunakan bentuk post ($a++) saat Anda hanya ingin efek sampingnya (menambah variabel), dan bentuk pre (++$a) saat nilai hasilnya benar-benar Anda butuhkan — kebiasaan ini menghindarkan pembaca dari bertanya-tanya urutan kejadian.
Perilaku Khusus pada null #
Apa yang terjadi bila variabelnya belum diisi? Increment pada null menghasilkan 1 — perilaku warisan PHP yang justru cukup berguna untuk penghitung opsional:
<?php
$jumlahKunjungan = null;
$jumlahKunjungan++;
var_dump($jumlahKunjungan);Output yang Dihasilkan:
int(1)Penjelasannya: null + 1 memang menghasilkan 1 dalam aritmatika PHP, dan ++ mengikuti aturan yang sama. Pola ini sering dipakai untuk menghitung kemunculan data: mulai dari null (belum ada catatan), dan pemeriksaan pertama langsung mengubahnya menjadi 1.
Perilaku Khusus pada String #
Increment pada string adalah salah satu keunikan paling terkenal PHP: huruf “naik” seperti odometer alfabet, mengikuti gaya Perl. Digit naik 0-9 lalu carry ke huruf di kirinya; huruf kecil naik a-z lalu menambah panjang; begitu pula huruf besar:
<?php
$huruf = "a";
$huruf++;
echo $huruf . "\n";
$batas = "z";
$batas++;
echo $batas . "\n";
$kode = "a9";
$kode++;
echo $kode . "\n";
$kodePlat = "Bz";
$kodePlat++;
echo $kodePlat . "\n";Output yang Dihasilkan:
b
aa
b0
CaMari kita telaah hasilnya:
"a"→"b": huruf biasa naik satu."z"→"aa": habis diz, string bertambah panjang — persis seperti9menjadi10pada angka."a9"→"b0": digit9carry, huruf di kirinya ikut naik."Bz"→"Ca":zcarry keByang naik menjadiC, dan posisi terakhir kembali kea.
Perilaku string increment ini nyata dan stabil — beberapa program memakainya untuk menghasilkan kode berurutan seperti AA-001. Namun ada dua batasan penting. Pertama, string yang seluruhnya berupa angka (misalnya "5" atau "009") langsung dikonversi menjadi integer saat di-increment: "5"++ menghasilkan int(6), bukan string "6":
<?php
$versi = "5";
$versi++;
var_dump($versi);
$versi--;
var_dump($versi);Output yang Dihasilkan:
int(6)
int(5)Kedua, decrement tidak bekerja pada huruf. Operator -- pada string non-numerik tidak mengubah apa pun, dan sejak PHP 8.3 perilaku tersebut resmi diberi tanda Deprecated:
<?php
$huruf = "b";
$huruf--;
echo $huruf . "\n";Saat dijalankan, nilai $huruf tetap "b" dan PHP mencetak peringatan berikut (diambil dari eksekusi nyata di PHP 8.4; nama berkas dan nomor baris menyesuaikan kode Anda):
Deprecated: Decrement on non-numeric string has no effect and is deprecated in contoh.php on line 4
bKesimpulan praktisnya sederhana: gunakan increment/decrement hanya untuk integer dan penghitung null-ke-1, dan anggap string increment sebagai trik khusus yang perlu dijelaskan lewat komentar bila dipakai.
Increment dalam Perulangan #
Rumah asli operator ++ adalah perulangan for, tempatnya menggerakkan penghitung dari satu nilai ke nilai berikutnya:
<?php
for ($i = 1; $i <= 3; $i++) {
echo "Putaran ke-$i\n";
}Output yang Dihasilkan:
Putaran ke-1
Putaran ke-2
Putaran ke-3Bagian $i++ pada baris pertama dijalankan setiap satu putaran selesai, menggerakkan 1 → 2 → 3 hingga kondisi $i <= 3 tidak lagi terpenuhi. (Struktur for dan seluruh keluarga perulangan dibahas tuntas pada Section Control Flow — di sini kita cukup mengenali peran $i++.) Berkas contoh.php pada bagian bawah halaman merangkum seluruh eksperimen Chapter ini dalam satu program utuh.
Ringkasan #
Operator ++ dan -- mengubah variabel sebanyak satu langkah; posisi tandanya menentukan nilai ekspresi — $a++ menyerahkan nilai lama, ++$a nilai baru. Increment pada null menghasilkan 1 dan berguna untuk penghitung opsional, sedangkan increment string mengikuti aturan odometer alfabet dengan batasan pada string numerik dan decrement. Dengan seluruh operator kini sudah kita kenal, saatnya membahas aturan yang mengatur kapan masing-masing dievaluasi: operator precedence.
Referensi #
- Dokumentasi operator increment/decrement — php.net
- Perubahan PHP 8.3 (decrement pada null dan string) — php.net
- Struktur perulangan for — php.net
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
contoh.php
Unduh berkas<?php
// contoh.php — rangkuman Increment dan Decrement
// Jalankan dengan: php contoh.php
// 1. Sebagai statement, posisi tanda tidak berpengaruh
$counter = 10;
$counter++;
$counter++;
echo "Counter : $counter\n";
$counter--;
echo "Counter : $counter\n";
// 2. Post-increment: nilai lama yang tersalin
$a = 5;
$b = $a++;
echo "Post : a = $a, b = $b\n";
// 3. Pre-increment: nilai baru yang tersalin
$c = 5;
$d = ++$c;
echo "Pre : c = $c, d = $d\n";
// 4. Increment pada null menghasilkan 1 (penghitung opsional)
$jumlahKunjungan = null;
$jumlahKunjungan++;
echo "Kunjungan : " . var_export($jumlahKunjungan, true) . "\n";
// 5. String increment ala odometer alfabet
$kode = "a9";
$kode++;
echo "Kode : $kode\n";
$kodePlat = "Bz";
$kodePlat++;
echo "Kode plat : $kodePlat\n";
// 6. String numerik langsung menjadi integer
$versi = "5";
$versi++;
echo "Versi : " . var_export($versi, true) . "\n";
// 7. Penggerak perulangan
for ($i = 1; $i <= 3; $i++) {
echo "Putaran ke-$i\n";
}