Operator adalah simbol yang menggabungkan nilai menjadi ekspresi baru, dan hampir setiap perhitungan dalam program PHP dikerjakan melalui operator. Topik ini membahas kelompok operator yang paling mendasar, yaitu operator aritmetika beserta urutan pengerjaannya, operator penugasan dan penggabungan string, perbandingan lemah dan perbandingan ketat, serta spaceship operator yang mengembalikan urutan relatif dua nilai dalam satu ekspresi.
Operator aritmetika#
Enam operator aritmetika mencakup perhitungan dasar program. Operator +, -, dan * bekerja seperti matematika biasa, operator / menghasilkan bilangan pecahan pada pembagian yang tidak habis, operator % mengembalikan sisa pembagian, dan operator ** menghitung pangkat. Tabel berikut merangkum keenam operator beserta contoh hasilnya.
| Operator | Nama | Contoh | Hasil |
|---|---|---|---|
+ | penjumlahan | 7 + 2 | 9 |
- | pengurangan | 7 - 2 | 5 |
* | perkalian | 7 * 2 | 14 |
/ | pembagian | 7 / 2 | 3.5 |
% | modulo | 7 % 2 | 1 |
** | pangkat | 2 ** 3 | 8 |
Urutan pengerjaan mengikuti presedens matematika. Perkalian, pembagian, modulo, dan pangkat dikerjakan lebih dahulu daripada penjumlahan dan pengurangan, sedangkan tanda kurung memaksa kelompok di dalamnya dikerjakan lebih dahulu. Sifat asosiatif juga menentukan hasil, karena pengurangan dan pembagian dikerjakan dari kiri ke kanan, sedangkan pangkat dikerjakan dari kanan ke kiri.
<?php
var_dump(2 + 3 * 4);
var_dump((2 + 3) * 4);
var_dump(10 - 4 - 3);
var_dump(7 % 3);
var_dump(2 ** 10);
var_dump(2 ** 3 ** 2);int(14)
int(20)
int(3)
int(1)
int(1024)
int(512)Baris-baris keluaran di atas memperlihatkan setiap aturan pada praktiknya. Ekspresi 2 + 3 * 4 menghasilkan 14 karena perkalian diutamakan, sedangkan (2 + 3) * 4 menghasilkan 20 karena kurung diutamakan. Ekspresi 10 - 4 - 3 menghasilkan 3 karena pengerjaannya bergerak dari kiri. Ekspresi 2 ** 3 ** 2 menghasilkan 512 dan bukan 64, karena pangkat yang paling kanan dikerjakan lebih dahulu.
Perbandingan == versus ===#
Operator == membandingkan nilai setelah mengonversi kedua operannya ke tipe yang sama, sedangkan operator === membandingkan nilai dan tipe sekaligus tanpa konversi. Pasangan != dan !== masing-masing menjadi kebalikannya. Perbedaan kedua keluarga ini sudah diperkenalkan pada topik variabel, dan bagian ini merangkumnya sebagai aturan operator.
<?php
var_dump(10 == "10");
var_dump(10 === "10");
var_dump(0 == "");
var_dump("1e2" == "100");
var_dump(null == false);
var_dump(null === false);bool(true)
bool(false)
bool(false)
bool(true)
bool(true)
bool(false)Enam baris keluaran di atas memuat dua perilaku yang paling sering menjadi jebakan. Baris ketiga bernilai false sejak PHP 8.0 karena string kosong tidak lagi dianggap sama dengan angka 0, sedangkan pada PHP 7 hasilnya true. Baris keempat bernilai true karena kedua string sama-sama numerik dan mewakili angka seratus, sehingga perbandingannya dilakukan secara numerik. Sisanya menegaskan bahwa === menuntut kesamaan tipe, seperti null dan false yang sama-sama dianggap false tetapi bertipe berbeda.
Kaidah praktisnya sederhana. Gunakan === dan !== untuk seluruh perbandingan program kecuali konversi otomatis memang diinginkan, dan pastikan tipe kedua nilai sudah dikendalikan bila == tetap digunakan.
Spaceship operator#
Spaceship operator ditulis <=> dan membandingkan dua nilai dalam satu ekspresi. Hasilnya adalah -1 bila operan kiri lebih kecil, 0 bila keduanya sama, dan 1 bila operan kiri lebih besar. Perbandingannya mengikuti aturan operator perbandingan biasa, termasuk aturan string numerik.
<?php
echo (5 <=> 9) . PHP_EOL;
echo (7 <=> 7) . PHP_EOL;
echo (12 <=> 3) . PHP_EOL;
echo ("apel" <=> "jeruk") . PHP_EOL;-1
0
1
-1Baris terakhir membandingkan dua string, dan urutannya mengikuti urutan byte, sehingga "apel" dinilai lebih kecil daripada "jeruk". Hasil tiga nilai semacam ini persis bentuk yang dibutuhkan fungsi pengurut seperti usort, yang meminta fungsi pembanding mengembalikan bilangan negatif, nol, atau positif. Karena itu, operator ini nanti menjadi tulang punggung pengurutan array.
Penugasan dan penggabungan#
Operator penugasan = menyimpan nilai ke variabel, dan bentuk gabungannya menyatukan operasi dengan penugasan, misalnya $stok += 3 yang setara dengan $stok = $stok + 3. Bentuk gabungan tersedia untuk seluruh operator aritmetika beserta operator titik. Operator titik sendiri adalah operator penggabungan string, dan bentuk .= menjadi cara ringkas menambahkan teks pada akhir sebuah string.
<?php
$stok = 10;
$stok += 3;
echo $stok . PHP_EOL;
$laporan = "Stok awal: ";
$laporan .= "10 unit";
echo $laporan . PHP_EOL;
var_dump("5" . "5");
var_dump("5" + "5");13
Stok awal: 10 unit
string(2) "55"
int(10)Dua pemanggilan var_dump terakhir memuat perbedaan yang menentukan. Operator titik menggabungkan dua string menjadi "55", sedangkan operator tambah menafsirkan keduanya sebagai bilangan dan menghasilkan 10. Dua operator itu tidak dapat dipertukarkan, dan penggunaan + ketika maksudnya menggabungkan teks merupakan kesalahan yang sering ditemui dalam kode PHP.
Kesalahan umum#
Tiga kesalahan berikut paling sering ditemui saat operator digunakan.
- Operator
+digunakan untuk menggabungkan teks. Hasilnya berupa penjumlahan angka, seperti"5" + "5"yang bernilai 10. Perbaikannya adalah menggunakan operator titik untuk penggabungan string. - Presedens operator diabaikan pada ekspresi panjang, sehingga hasilnya berbeda dari maksud penulisnya. Perbaikannya adalah menuliskan tanda kurung untuk setiap kelompok yang hendak dikerjakan lebih dahulu.
- Perbandingan lemah digunakan pada kondisi pencabangan dengan nilai yang tipenya tidak terkendali. Hasil perbandingan bisa berlawanan dengan harapan tanpa pesan error. Perbaikannya adalah menggunakan
===dan mengendalikan tipe nilai sebelum dibandingkan.
Ringkasan#
- Operator aritmetika mengikuti presedens matematika, pengurangan dan pembagian asosiatif dari kiri, sedangkan pangkat asosiatif dari kanan.
==mengonversi tipe sebelum membandingkan dan===menuntut kesamaan nilai sekaligus tipe, dengan aturan string non-numerik yang diperketat sejak PHP 8.<=>mengembalikan -1, 0, atau 1 sesuai urutan operannya, dan bentuknya cocok untuk fungsi pembanding pengurutan.- Operator titik menggabungkan string sedangkan operator tambah menjumlahkan angka, sehingga
"5" . "5"menghasilkan"55"dan"5" + "5"menghasilkan 10.
Referensi#
- Arithmetic Operators — PHP Manual — Dokumentasi operator aritmetika beserta presedens dan penanganan pembagian nol.
- Comparison Operators — PHP Manual
— Tabel perbandingan antartipe untuk
==dan===. - String Operators — PHP Manual
— Dokumentasi operator titik dan bentuk gabungan
.=beserta perbedaannya dengan operator tambah. - Assignment Operators — PHP Manual — Daftar bentuk penugasan gabungan untuk aritmetika dan string.