Menghitung tanpa bisa menyimpan hasilnya sama saja dengan mengerjakan soal di kepala — hasilnya hilang begitu selesai. Operator assignment adalah mekanisme PHP untuk mengikat hasil sebuah ekspresi ke variabel, dan Anda sudah memakainya sejak chapter Variabel . Pada chapter ini kita akan membedah operator = secara benar (termasuk fakta bahwa assignment adalah ekspresi yang bernilai), lalu merangkai operator gabungan seperti += dan .= serta assignment referensi =&.

Operator Assignment Dasar #

Operator = memberikan nilai di sisi kanan ke variabel di sisi kiri. Yang sering disalahpahami pemula: = bukan pernyataan matematika “sama dengan”, melainkan perintah penugasan. Ekspresi $stok = 15 dibaca “simpan nilai 15 ke dalam variabel $stok”. Karena itulah penulisan seperti $stok = $stok - 4 masuk akal: PHP membaca nilai $stok yang lama, menguranginya, lalu menimpa $stok dengan hasil baru.

Assignment juga bisa dirangkai berantai karena operator = dievaluasi dari kanan ke kiri. Ekspresi $a = $b = $c = 10 berarti 10 diberikan ke $c dahulu, hasil penugasan itu diberikan ke $b, terakhir ke $a:

php
<?php
$a = $b = $c = 10;
var_dump($a, $b, $c);

$stok = 15;
$stok = $stok - 4;
echo "Stok setelah penyesuaian: $stok\n";

Output yang Dihasilkan:

text
int(10)
int(10)
int(10)
Stok setelah penyesuaian: 11

Assignment adalah Expression #

Fakta penting tentang = yang jarang disadari pemula: penugasan itu sendiri adalah expression yang menghasilkan nilai — yaitu nilai yang baru saja ditugaskan. Inilah sebabnya $a = $b = 10 bekerja: $b = 10 menghasilkan 10, lalu nilai itu diteruskan ke $a. Pola yang sama memungkinkan kita menugaskan dan langsung memakai nilainya dalam satu ekspresi:

php
<?php
$total = ($hargaSatuan = 5000) * 3;

echo "Harga satuan: $hargaSatuan\n";
echo "Total       : $total\n";

Output yang Dihasilkan:

text
Harga satuan: 5000
Total       : 15000

Pada baris pertama, tanda kurung memaksa 5000 disimpan ke $hargaSatuan lebih dahulu; hasil penugasan itu (5000) kemudian dikalikan 3 menghasilkan 15000 untuk $total. Pola ini sah secara sintaks, tetapi banyak tim programming menghindarinya karena dua hal terjadi dalam satu baris dan kode menjadi lebih sulit dibaca. Gunakan pola ini seperlunya dan utamakan kejelasan.

Operator Assignment Gabungan #

Mengubah nilai variabel dengan nilai lama sebagai bahan adalah kebutuhan yang sangat sering muncul: menambah stok, mengurangi saldo, menumpuk teks. PHP menyediakan bentuk ringkas untuk pola $a = $a <op> $b, yaitu operator assignment gabungan (compound assignment). Tabel berikut memakai nilai awal $a = 10:

OperatorSetara denganOperasiHasil $a
$a += 3$a = $a + 3tambah13
$a -= 3$a = $a - 3kurang7
$a *= 3$a = $a * 3kali30
$a /= 4$a = $a / 4bagi2.5
$a %= 3$a = $a % 3sisa bagi1
$a **= 3$a = $a ** 3pangkat1000
$a .= "!"$a = $a . "!"gabung string"10!"

Mari kita buktikan seluruh baris tabel tersebut dalam satu program berurutan:

php
<?php
$a = 10;

$a += 3;
echo "setelah += 3  : $a\n";

$a -= 8;
echo "setelah -= 8  : $a\n";

$a *= 5;
echo "setelah *= 5  : $a\n";

$a /= 5;
echo "setelah /= 5  : $a\n";

$a %= 3;
echo "setelah %= 3  : $a\n";

$a **= 3;
echo "setelah **= 3 : $a\n";

Output yang Dihasilkan:

text
setelah += 3  : 13
setelah -= 8  : 5
setelah *= 5  : 25
setelah /= 5  : 5
setelah %= 3  : 2
setelah **= 3 : 8

Setiap baris membaca nilai $a terkini, menerapkan operasi aritmatika, lalu menulis hasilnya kembali ke $a — persis seperti kolom “Setara dengan” pada tabel. Nilai $a berjalan sebagai berikut: 13 setelah +=, 5 setelah -=, 25 setelah *=, 5 setelah /=, 2 setelah %=, dan 8 setelah **=. Perhatikan bahwa 25 /= 5 menghasilkan 5 yang tetap berupa integer karena pembagiannya habis; jika tidak habis dibagi, hasil otomatis menjadi float — persis perilaku operator / yang sudah kita bahas pada chapter Operator Aritmatika .

Dari seluruh operator gabungan di atas, satu beroperasi pada string. Operator .= menumpuk teks di akhir string yang sudah ada, pola yang sangat umum saat merangkai kalimat atau log:

php
<?php
$kalimat = "Belajar";
$kalimat .= " PHP";
$kalimat .= " itu menyenangkan";

echo $kalimat . "!\n";

Output yang Dihasilkan:

text
Belajar PHP itu menyenangkan!

Variabel $kalimat berubah dari "Belajar" menjadi "Belajar PHP" lalu "Belajar PHP itu menyenangkan". Tanpa ., Anda harus menulis $kalimat = $kalimat . " PHP" — hasilnya sama, tetapi .= lebih ringkas dan langsung terbaca sebagai “tambahkan di belakang”.

Assignment Referensi #

Secara bawaan, penugasan menyalin nilai: kedua variabel menjadi independen setelah penugasan. PHP juga menyediakan assignment referensi dengan operator =& yang membuat kedua variabel menunjuk ke nilai yang sama — mengubah salah satu berarti mengubah keduanya:

php
<?php
$namaAsli = "Budi";

$salinan = $namaAsli;       // menyalin nilai
$referensi = &$namaAsli;    // membuat alias ke variabel yang sama

$namaAsli = "Siti";

echo "Salinan    : $salinan\n";
echo "Referensi  : $referensi\n";

Output yang Dihasilkan:

text
Salinan    : Budi
Referensi  : Siti

Setelah $namaAsli diubah menjadi "Siti", variabel $salinan tetap berisi "Budi" karena nilai lama sudah disalin sejak awal. Sebaliknya $referensi ikut berubah menjadi "Siti" karena variabel tersebut hanyalah nama lain untuk $namaAsli. Konsep referensi memiliki banyak konsekuensi lanjutan — termasuk perilakunya pada argumen function dan array — yang kita bedah tuntas di chapter Memahami Variable References .

Operator Null Coalescing Assignment #

Sejak PHP 7.4, PHP menyediakan operator ??= yang memberi nilai baru hanya jika variabel saat ini bernilai null. Ekspresi $x ??= $default setara dengan $x = $x ?? $default: jika $x bukan null, tidak ada yang berubah; jika null atau belum ada nilainya, $x diisi $default:

php
<?php
$tema = null;

$tema ??= "terang";
echo "Tema pertama: $tema\n";

$tema ??= "gelap"; // $tema sudah berisi nilai, diabaikan
echo "Tema kedua  : $tema\n";

$batas ??= 25; // variabel sebelumnya tidak ada -> terisi 25
echo "Batas       : $batas\n";

Output yang Dihasilkan:

text
Tema pertama: terang
Tema kedua  : terang
Batas       : 25

Pada pemanggilan pertama, $tema bernilai null sehingga terisi "terang". Pemanggilan kedua diabaikan karena "terang" bukan null — inilah perbedaan kunci ??= dibanding =. Baris terakhir menunjukkan kasus ketiga: $batas belum pernah didefinisikan, dan ??= tetap aman mendefinisikannya tanpa memicu peringatan. Operator ini adalah anggota keluarga null coalescing yang akan kita dalami pada chapter Null Coalescing Operator .

Berkas contoh.php pada bagian bawah halaman merangkum seluruh contoh chapter ini dalam satu program yang bisa dijalankan langsung.

Referensi #

Ringkasan #

Operator = menugaskan nilai dan sekaligus merupakan ekspresi yang bernilai, sehingga assignment bisa dirangkai dan dipakai di dalam ekspresi lain. Operator gabungan +=, -=, *=, /=, %=, **=, .= mempersingkat pola “baca-ubah-tulis”, sementara =& membuat alias antarvariabel dan ??= mengisi nilai hanya saat variabel bernilai null. Dengan kemampuan menyimpan hasil perhitungan, kita sekarang siap menguji hubungan antarnilai — itulah tugas operator perbandingan pada chapter berikutnya.

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

contoh.php

Unduh berkas
php
<?php
// contoh.php — rangkuman Operator Assignment
// Jalankan dengan: php contoh.php

echo "== Assignment berantai ==\n";
$a = $b = $c = 10;
var_dump($a, $b, $c);

echo "\n== Assignment adalah expression ==\n";
$total = ($hargaSatuan = 5000) * 3;
echo "Harga satuan: $hargaSatuan\n";
echo "Total       : $total\n";

echo "\n== Operator gabungan ==\n";
$x = 10;
$x += 3;   // 13
$x -= 8;   // 5
$x *= 5;   // 25
$x /= 5;   // 5
$x %= 3;   // 2
$x **= 3;  // 8
echo "Hasil akhir rangkaian: $x\n";

$y = 9;
$y /= 2; // pembagian tidak habis -> float
var_dump($y);

echo "\n== Gabungan string (.=) ==\n";
$kalimat = "Belajar";
$kalimat .= " PHP";
$kalimat .= " itu menyenangkan";
echo $kalimat . "!\n";

echo "\n== Assignment referensi (=&) ==\n";
$namaAsli = "Budi";
$salinan = $namaAsli;
$referensi = &$namaAsli;
$namaAsli = "Siti";
echo "Salinan   : $salinan\n";
echo "Referensi : $referensi\n";

echo "\n== Null coalescing assignment (??=) ==\n";
$tema = null;
$tema ??= "terang";
echo "Tema pertama: $tema\n";
$tema ??= "gelap"; // bukan null, diabaikan
echo "Tema kedua  : $tema\n";
$batas ??= 25; // variabel belum ada -> terisi 25
echo "Batas       : $batas\n";