Menu

Operator PHP: Aritmetika, Logika, String, dan Lainnya

Operator PHP bekerja pada nilai: +, -, *, /, %, ** untuk aritmetika, =, +=, .=, ??= untuk assignment, &&, ||, ! dan xor untuk logika, . untuk menggabungkan string, ==, ===, <=> untuk perbandingan, dan ++, -- untuk increment. Pelajari setiap kelompok dengan contoh yang bisa dijalankan, ditambah jebakan prioritas and vs &&.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Operator menerima satu nilai atau lebih dan menghasilkan nilai baru: $a + $b menjumlahkan, $a . $b menggabungkan string, $a && $b adalah AND logika, $a === $b membandingkan, $i++ menaikkan nilai.

/ mengembalikan float kecuali dua integer habis dibagi: 17 / 5 menghasilkan 3.4, 10 / 5 menghasilkan integer 2. Saat kamu hanya ingin bagian bilangan bulatnya, pakai intdiv(). Pembulatan dibahas di halaman matematika.

Operator aritmetika

OperatorNamaContohHasil
+Penjumlahan7 + 29
-Pengurangan7 - 25
*Perkalian7 * 214
/Pembagian7 / 23.5
%Modulo (sisa bagi)7 % 21
**Pangkat7 ** 249
-$aNegasi-7-7

Modulo berguna untuk "setiap item ke-N" dan pemeriksaan genap/ganjil. Hasilnya mengikuti tanda sisi kiri, dan pembagian dengan nol melempar error yang bisa kamu tangkap:

Operator assignment

= menyimpan sebuah nilai. Setiap operator aritmetika dan string punya bentuk gabungan yang memperbarui variabel di tempatnya.

??= termasuk keluarga operator null coalescing. Operator ini hanya mengisi nilai saat variabelnya belum diisi atau bernilai null.

Increment dan decrement: ++ dan --

$i++ mengembalikan nilai saat ini, lalu menambahkan 1. ++$i menambahkan 1, lalu mengembalikan nilai yang baru. Perbedaannya hanya terlihat saat kamu memakai hasilnya di ekspresi yang sama.

Trik huruf ini sering dipakai untuk membuat nama kolom spreadsheet (A, B, ... Z, AA).

Operator logika: &&, ||, ! dan xor

OperatorBernilai true saat
$a && $bkeduanya true
$a || $bsetidaknya satu true
!$a$a false
$a xor $btepat satu yang true
$a and $b, $a or $bsama dengan && dan ||, dengan prioritas lebih rendah

&& dan || melakukan short-circuit: sisi kanan tidak dievaluasi saat sisi kiri sudah menentukan hasilnya. Itulah yang membuat isset($user) && $user->isAdmin() aman.

and vs &&: jebakan prioritas

and dan or mengikat lebih longgar daripada =, jadi di dalam assignment keduanya diterapkan setelah nilainya disimpan. Ini bug klasik:

Prioritas yang rendah itu berguna di satu idiom, $file = fopen($path, 'r') or die('Cannot open');, tempat kamu ingin assignment terjadi lebih dulu. Di tempat lain, pakai && dan ||.

Operator string: . dan .=

PHP punya dua operator string: . menggabungkan dua string ("Grace" . " " . "Hopper") dan .= menambahkan ke sebuah variabel ($html .= "<li>"). + tidak pernah menggabungkan string: "3" + "4" adalah angka 7, sedangkan "3" . "4" adalah string "34". Halaman string membahas interpolasi dan tanda kutip.

Perbandingan dan operator spaceship <=>

== membandingkan setelah mengonversi tipe, === juga memeriksa tipenya, dan <=> mengembalikan -1, 0, atau 1, persis yang dibutuhkan callback pengurutan. Detailnya dan tabel lengkap perbandingan loose ada di halaman operator perbandingan.

Operator array

+ pada array adalah union: key dari array kiri yang menang dan hanya key yang belum ada yang ditambahkan dari kanan. Hal ini mengejutkan orang yang mengira operator itu akan menambahkan di belakang. == memeriksa pasangan key/value yang sama, === juga mewajibkan urutan dan tipe yang sama.

Untuk menambahkan satu list ke list lain, pakai array_merge() atau sintaks spread [...$a, ...$b].

Prioritas operator

Saat sebuah ekspresi mencampur beberapa operator, PHP menerapkannya dengan urutan yang tetap. Yang sering menjebak, beserta apa yang dicetak PHP 8.3:

echo 2 + 3 * 4;        // 14: * before +
echo (2 + 3) * 4;      // 20
echo 2 ** 3 ** 2;      // 512: right to left, 2 ** 9
echo -2 ** 2;          // -4: ** before unary minus
echo "Sum: " . 2 + 3;  // Sum: 5, since PHP 8 + runs before .

Kalau ragu, tambahkan tanda kurung. Tanda kurung tidak ada ruginya, dan orang berikutnya yang membaca baris itu tidak perlu mengingat tabelnya.

Pertanyaan yang sering diajukan

Apa perbedaan and dan && di PHP?

Keduanya adalah AND logika, tetapi and punya prioritas lebih rendah daripada =. Jadi $x = true and false; menyimpan true di $x (assignment terjadi lebih dulu), sedangkan $x = true && false; menyimpan false. Pakai && dan || di dalam ekspresi dan jauhkan and/or dari assignment.

Apa fungsi % di PHP?

% adalah operator modulo: operator ini mengembalikan sisa dari pembagian integer, jadi 10 % 3 menghasilkan 1. Hasilnya mengikuti tanda operand kiri (-7 % 3 menghasilkan -1). Untuk float pakai fmod(), dan % 0 melempar DivisionByZeroError.

Bagaimana cara memangkatkan angka di PHP?

Pakai operator **: 2 ** 10 menghasilkan 1024. Operator ini asosiatif kanan, jadi 2 ** 3 ** 2 adalah 2 ** 9 = 512, dan mengikat lebih kuat daripada minus unary, jadi -2 ** 2 menghasilkan -4. Fungsi pow(2, 10) melakukan hal yang sama.

Apa perbedaan $i++ dan ++$i di PHP?

Keduanya menambahkan 1 ke $i. $i++ (post-increment) mengembalikan nilai lama lalu menambahkannya; ++$i (pre-increment) menambahkan lebih dulu lalu mengembalikan nilai baru. Di barisnya sendiri, seperti langkah for loop, tidak ada bedanya.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai