Operator Aritmatika & Assignment
Hitung-hitungan di PHP: tambah, kurang, modulus, pangkat, dan operator assignment ringkas.
Analogi: Kalkulator dan Buku Kas
Operator aritmatika (+ - * / %) adalah tombol-tombol kalkulator: mereka mengubah angka menjadi angka lain. Operator assignment (= += -= *= /= .=) adalah cara mencatat ke buku kas: "tambahkan pemasukan hari ini ke total yang sudah ada". Keduanya hampir selalu muncul bersamaan dalam program nyata, misalnya menghitung total belanja di kasir.
Kenapa Dua Jenis Operator Ini Digabung?
Hampir setiap perhitungan butuh dua langkah: (1) hitung sesuatu, (2) simpan hasilnya kembali ke variabel yang sama. Tanpa operator assignment gabungan, kamu menulis $total = $total + $harga; berulang-ulang. Operator seperti += memadatkan pola itu menjadi $total += $harga;: lebih pendek, lebih jelas maksudnya ("tambahkan ke total").
<?php
// Contoh 1: kasir sederhana
$total = 0;
$total += 15000; // beli kopi, sama dengan $total = $total + 15000
$total += 8000; // tambah roti
$total -= 2000; // dapat diskon
$total *= 1.1; // tambah pajak 10%
echo "Total bayar: Rp" . number_format($total);
// Hasil: Total bayar: Rp23.100Perhatikan $total *= 1.1;: mengalikan total saat ini dengan 1.1 sama dengan menambah 10%. Pola akumulasi seperti ini adalah 80% isi program kasir, keranjang belanja, atau rekap nilai.
<?php
// Contoh 2: operator yang sering dilupakan: modulus dan increment
echo 17 % 5; // int(2): sisa pembagian. 17 = 3x5 sisa 2
// Kegunaan nyata: cek ganjil/genap
$nomor = 7;
if ($nomor % 2 === 1) {
echo "Nomor $nomor ganjil";
}
$stok = 10;
$stok++; // tambah 1, sama dengan $stok += 1
$stok--; // kurang 1
echo $stok; // 10 (naik 1 lalu turun 1)
$nama = "Budi";
$nama .= " Santoso"; // operator titik-sama: sambung string!
echo $nama; // "Budi Santoso"Modulus % adalah operator yang paling diremehkan padahal sangat berguna (ganjil/genap, baris tabel belang-belang, pembagian kelompok). Dan .= adalah versi string dari +=, wajib hafal karena dipakai terus saat menyusun HTML dari PHP.
Kesalahan Umum Pemula
Salah: pembagian yang menghasilkan float tanpa sadar.
<?php
$hasil = 7 / 2; // float(3.5), BUKAN int(3)!Di PHP, / selalu bisa menghasilkan desimal. Kalau kamu butuh pembagian bulat, pakai intdiv(7, 2) yang menghasilkan 3. Bug klasik: menghitung jumlah halaman dari total data lalu lupa hasilnya desimal.
Salah: tertukar = dan ==.
<?php
$stok = 10;
if ($stok = 0) { // SALAH: ini MENGISI $stok dengan 0, bukan membandingkan!
echo "habis";
}Satu tanda = artinya "simpan", dua tanda == artinya "bandingkan". Kode di atas selalu salah karena $stok diisi 0 (yang dianggap false). Error ini tidak memunculkan pesan sama sekali, jadi sangat sulit ditemukan kalau tidak tahu polanya.
Salah: memakai ++ dalam ekspresi rumit.
<?php
$a = 5;
$b = $a++ + ++$a; // JANGAN! Hasilnya membingungkan dan rawan salahAturan aman: pakai ++ dan -- hanya sendirian dalam satu baris ($stok++;). Jangan selipkan di dalam perhitungan atau echo.
Studi Kasus: Kasir Warung
Mari gabungkan semua operator dalam satu program kasir mini yang realistis:
<?php
$kopi = 15000; $roti = 12000;
$qtyKopi = 2; $qtyRoti = 1;
$subtotal = ($kopi * $qtyKopi) + ($roti * $qtyRoti); // 42000
$diskon = $subtotal >= 40000 ? $subtotal * 0.1 : 0; // diskon 10% jika >= 40rb
$setelahDiskon = $subtotal - $diskon;
$pajak = $setelahDiskon * 0.11; // PPN 11%
$total = $setelahDiskon + $pajak;
$bayar = 50000;
$kembalian = $bayar - $total;
echo "Subtotal: Rp" . number_format($subtotal) . "\n";
echo "Diskon: Rp" . number_format($diskon) . "\n";
echo "Total: Rp" . number_format($total) . "\n";
echo "Kembalian: Rp" . number_format($kembalian) . "\n";Perhatikan operator ternary ? : (if-else satu baris) untuk diskon. Pola "hitung bertahap dengan variabel bernama jelas" membuat struk mudah diaudit: setiap baris punya arti bisnis yang jelas, bukan rumus raksasa satu baris.
Catatan teknis: Fungsi
number_format(23100)mengubah angka menjadi"23.100"agar enak dibaca manusia. Untuk uang, selalu format saat menampilkan, tapi simpan dan hitung dalam bentuk angka murni agar perhitungannya tetap akurat.
Tantangan
Hitung kembalian kasir
Buat $harga = 17500 dan $bayar = 50000. Hitung $kembalian dengan pengurangan, tampilkan "Kembalian: Rp X". Bonus: pakai modulus untuk cek apakah kembalian habis dibagi 500.