Kodealgo

Operator PHP

Operator merupakan sesuatu yang membutuhkan satu atau lebih nilai (ekspresi) dan menghasilkan nilai lain. Misalnya, ketika kita ingin menjumlahkan dua buah angka, kita membutuhkan operator + (tambah) yang bertugas untuk menjumlahkan dua buah nilai dan menghasilkan nilai hasil penjumlahan.

Kali ini kita akan mempelajari secara detail mengenai operator-operator yang bisa kita gunakan di PHP, mulai dari urutan prioritas operator, mempelajari bagaimana pengelompokan operator berdasarkan jumlah nilai yang dibutuhkannya (seperti unary, biner, dan ternary), dan jenis-jenis operator.

Berikut beberapa topik yang akan kita bahas terkait operator di PHP:

  1. Prioritas Operator
  2. Pengelompokkan Operator Berdasarkan Jumlah Nilai
  3. Jenis-jenis Operator PHP
    1. Operator Aritmatika
    2. Operator Penugasan
      1. Operator Penugasan Aritmatika
      2. Operator Penugasan Bitwise
      3. Operator Penugasan Lainnya
    3. Operator Perbandingan
    4. Operator Logika
    5. Operator String
    6. Operator Increment dan Decrement
    7. Operator Bitwise
    8. Operator Tipe
    9. Operator Eksekusi

Prioritas Operator

Prioritas operator menentukan bagaimana mengikat atau mengelompokkan dua ekspresi atau mana yang harus dievaluasi terlebih dahulu.

Misalnya, kita memiliki ekspresi berikut: 2 + 3 * 5, berapa hasilnya?

Ada dua kemungkinan hasil yang bisa kita dapatkan, yaitu:

  1. Hasil 25 - kami menjumlahkan terlebih dahulu 2 + 3 menghasilkan 5, kemudian mengalikannya dengan 5, sehingga 5 * 5 hasilnya 25.
  2. Hasil 17 - kami menjumlahkan perkalian terlebih dahulu 3 * 5 menghasilkan 15 kemudian menjumlahkannya dengan 2, yaitu 2 + 15 hasilnya 17.

Ketika kita menulis ekspresi di atas di dalam kode PHP, ini akan menghasilkan nilai 17, sesuai dengan aturan matematika yang kita pelajari disekolah, dimana operator perkalian (*) memiliki prioritas yang lebih tinggi dibanding penjumlahan (+).

Jadi, jawaban yang benar adalah jawabn kedua, 17.

Ketika dalam satu ekspresi berisi operator yang memiliki prioritas yang sama, sifat asosiatif mereka memutuskan bagaimana operator dikelompokan.

Misalnya, 1 + 2 + 3 memiliki asosiatif kiri, jadi interpreter PHP akan mengelompokkannya sebagai berikut: (1 + 2) + 3 hasilnya 5.

Contoh lain, $a = $b = $c, operator = memiliki sifat asosiatif kanan, oleh karena itu ekspresi ini dikelompokkan sebagai berikut $a = ($b = $c).

Bagaimana jika kita ingin secara eksplisit memaksa urutan prioritas, kita bisa mengelompokkannnya menggunakna tanda kurung.

Misalnya, kami ingin ekspresi berikut 2 + 3 * 5 menghasilkan nilai 25 bukan 17, maka kita bisa mengelompokkannya sebagai berikut (2 + 3) * 5.

Penggunaan tanda kurung, bahkan ketika tidak benar-benar diperlukan, seringkali dapat meningkatkan keterbacaan kode dengan membuat pengelompokkan menjadi eksplisit daripada mengandalkan urutan prioritas operator implisit dan asosiatif.

Tabel berikut mencantumkan urutan prioritas operator dari tertinggi hingga terendah, operator di baris yang sama memiliki prioritas yang sama.

AsosiatifOperator
-clone, new
kanan**
-+, -, ++, --, ~, (int), (float), (string), (array), (object), (bool), @
kiriinstanceof
-!
kiri*, /, %
kiri+, -, .
kiri<<, >>
-<, <=, >, >=
-==, !=, ===, !==, <>, <=>
kiri&
kiri^
kiri|
kiri&&
kiri||
kanan??
-? :
kanan=, +=, -=, *=, **=, /=, .=, %=, &=, |=, ^=, <<=, >>=, ??=
-yield from
-yield
-print
kiriand
kirixor
kirior

Pengelompokkan Operator Berdasarkan Jumlah Nilai

Kita mungkin pernah mendengar operator yang disebut unary, biner, atau ternary, apa yang dimaksud dari ketiganya?

Operator unary adalah operator yang membutuhkan satu nilai atau operan, misalnya operator increment n++, contoh 2++, atau operator logika not !n, conoth !true. Angka 2 dan boolean true dalam contoh adalah nilai yang dimaksud.

Operator biner (binary) adalah operator yang membutuhkan dua nilai, misalnya operator aritmatika penjumlahan (y + x).

Terakhir, operator ternary adalah operator yang membutuhkan tiga nilai (x ? y : z).

Jadi, singkatnya:

  • Ternary - membutuhkan satu nilai.
  • Biner - membutuhkan dua nilai.
  • Ternary - membutuhkan tiga nilai.

Jenis-jenis Operator PHP

Ada banyak jenis operator yang bisa kita gunakan di PHP, mari kita pelajari satu per satu mulai dari yang paling sering digunakan.

Operator Aritmatika

Masih ingat pelajaran matematik aritmatika dasar di sekolah? operator-operator ini bekerja dengan cara yang sama seperti yang telah kita pelajari.

Operator-operator ini biasanya digunakan untuk melakukan kalkulasi pada nilai dengan tipe angka seperti integer atau floating point.

Berikut daftar operator aritmatika yang bisa kita gunakan:

NamaSintaksDeskripsi
Identitas+$aKonversi $a ke integer atau floating point
Negasi-$aKebalikan dari $a
Penjumlahan$a + $bJumlah $a dan $b
Pengurangan$a - $bKurangi $a dengan $b
Perkalian$a * $bKalikan $a dengan $b
Pembagian$a / $bBagi $a dengan $b
Modulus$a % $bSisa pembagian $a dengan $b
Eksponen$a ** $b$a pangkat $b

Contoh:

$identitas = +true;
$negasi = -13;
$penjumlahan = 1 + 2;
$pengurangan = 5 - 2;
$perkalian = 3 * 2;
$pembagian = 6 / 2;
$modulus = 7 % 2;
$eksponen = 3 ** 5;

var_dump($identitas); // int(1)
var_dump($negasi); // int(-13)
var_dump($penjumlahan); // int(3)
var_dump($pengurangan); // int(3)
var_dump($perkalian); // int(6)
var_dump($pembagian); // int(3)
var_dump($modulus); // int(1)
var_dump($eksponen); // int(243)

Operator Penugasan

Operator penugasan hanya ada satu, yaitu =. Operator ini biasanya digunakan ketika kita ingin menugaskan nilai ke variabel (memasukkan nilai ke variabel), tapi sebetulnya kita juga bisa menugaskan berdasarkan referensi, tapi ini jarang dilakukan.

Contoh penugasan berdasarkan nilai:

$a = 5; // penugasan berdasarkan nilai

$b = $a;

$a = 6;

var_dump($a); // int(6)
var_dump($b); // int(5)

Ketika kita mengubah nilai $a dengan 6, nilai $b tidak berubah (tetap menggunakan nilai $a yang pertama, yaitu 5). Seperti itulah perilaku variabel yang ditugaskan berdasarkan referensi.

Sekarang mari kita lihat perilaku penugasan berdasarkan referensi.

$a = 5;

$b = &$a; // penugasan berdasarkan referensi (ada tanda "&")

$a = 6;

var_dump($a); // int(6)
var_dump($b); // int(6)

Ketika kita mengubah nilai $a dengan 6, nilai $b ikut berubah menjadi 6, begitu pula jika kita mengubah variabel $b, variabel $a juga akan ikut berubah.

Operator penugasan dapat digabungkan dengan operator lain, mari kita pelajari satu per satu.

Operator Penugasan Aritmatika

Operator penugasan aritmatika adalah penggabungan operator penugasan dengan operator aritmatika.

Berikut daftar operator penugasan aritmatika:

SintaksSetaraOperasi
$a += $b$a = $a + $bPenjumlahan
$a -= $b$a = $a - $bPengurangan
$a *= $b$a = $a * $bPerkalian
$a /= $b$a = $a / $bPembagian
$a %= $b$a = $a % $bModulus
$a **= $b$a = $a ** $bEksponen (pangkat)

Operator Penugasan Bitwise

Sama seperti aritmatika, operator penugasan bitwise adalah penggabungan operator penugasan dengan operator bitwise.

Berikut daftar operator penugasan bitwise:

SintaksSetaraOperasi
$a &= $b$a = $a & $bBitwise And
$a |= $b$a = $a | $bBitwise Or
$a ^= $b$a = $a ^ $bBitwise Xor
$a <<= $b$a = $a << $bLeft Shift
$a >>= $b$a = $a >> $bRight Shift

Operator Penugasan Lainnya

Selain operator aritmatika dan bitwise, operator penugasan juga dapat digabungkan dengan dua operator lainnya, yaitu operator penggabungan string, dan null coalesce.

Berikut daftar operator penugasan lainnya:

SintaksSetaraOperasi
$a .= $b$a = $a . $bPenggabungan String
$a ??= $b$a = $a ?? $bNull Coalesce

Operator Perbandingan

Sesuai dengan namanya, operator perbandingan adalah operator yang memungkinkan kita membandingkan dua nilai. Operator ini membutuhkan dua nilai (operator biner) dan menghasilkan nilai tunggal boolean, true atau false.

Berikut daftar operator perbandingan:

SintaksNamaHasil
$a == $bNilai setaratrue jika nilai $a sama dengan $b setelah type juggling
$a === $bNilai dan tipe setaratrue jika nilai dan tipe $a dan b sama
$a != $b atau $a <> $bNilai tidak samatrue jika nilai $a tidak sama dengan $b setelah type juggling
$a !== $bNilai dan tipe tidak samatrue jika nilai dan tipe $a tidak sama dengan $b
$a < $bKurang daritrue jika $a kurang dari $b
$a <= $bKurang dari atau sama dengantrue jika $a kurang dari atau sama dengan $b
$a > $bLebih daritrue jika $a lebih dari $b
$a >= $bLebih dari atau sama dengantrue jika $a lebih dari atau sama dengan $b

Contoh:

var_dump(2 == '2'); // bool(true)
var_dump(2 === 2); // bool(true)
var_dump(2 != '3'); // bool(true)
var_dump(2 !== 3); // bool(true)
var_dump(2 < 3); // bool(true)
var_dump(2 <= 2); // bool(true)
var_dump(3 > 2); // bool(true)
var_dump(2 >= 2); // bool(true)

Operator Logika

Operator logika secara umum merupakan operator biner (membutuhkan dua nilai), tapi ada juga operator unary yang membutuhkan satu nilai.

Operator logika biasanya digunakan untuk membandingkan dua nilai atau ekspresi yang menghasilkan nilai boolean, true atau false.

Jika nilai atau operan sebelum dan setelah operator bukan nilai boolean, maka akan dikonversi ke boolean.

Berikut daftar operator logika:

SintaksNamaHasil
$a and $b atau $a && $bDantrue jika $a dan $b bernilai true
$a or $b atau $a || $bAtautrue jika $a atau $b bernilai true
$a xor $bXortrue jika $a atau $b bernilai true, tetapi tidak keduanya
!$aNegasi (kebalikan)true jika $a dalah false, false jika $a adalah true

Dua operator paling atas memiliki alias, mereka ada karena memiliki urutan prioritas yang berbeda, lihat tabel prioritas operator di atas.

Contoh:

var_dump(true && true); // bool(true)
var_dump(false && true); // bool(false)

var_dump(true || false); // bool(true)
var_dump(false || false); // bool(false)

var_dump(true xor true); // bool(false)
var_dump(false xor true); // bool(true)

var_dump(!true); // bool(false)
var_dump(!false); // bool(true)

Operator String

Operator string hanya ada dua, yaitu titik (.) dan operator gabungan dengan penugasan yaitu titik sama dengan (.=), keduanya berfungsi untuk menggabugnkan string.

Contoh:

$sayHi = 'Hi';
$sayHiBudi = $sayHi . ' Budi';
var_dump($sayHiBudi); // string(7) "Hi Budi"

$sayHi2 = "Hi";
$sayHi2 .= " Budi";
var_dump($sayHi2); // string(7) "Hi Budi"

Operator Increment dan Decrement

Operator increment dan decrement adalah operator unary, operator ini bekerja pada nilai atau operan bertipe integer atau floating point.

Fungsi dari operator increment adalah untuk menambahkan nilai dengan 1, sedangkan decrement mengurangi nilai dengan 1.

PHP mendukung pre dan post increment dan decrement, pre dan post menentukan kapan nilai dikalkulasikan. Misalnya, jika kita menggunakan pre-increment hasilnya akan langsung dikembalikan saat dideklarasikan.

Sedangkan post-increment tidak, post-increment akan mengembalikan nilai awalnya terlebih dahulu (nilai sebelum ditambah), setelah deklarasi, nilai kemudian akan dijumlahkan, setelah itu nilainya baru berubah. Agar lebih jelas lihat contoh dibawah.

Berikut daftar operator increment dan decrement.

SintaksNamaDeskripsi
++$aPre-incrementTambah $a dengan 1, lalu kembalikan hasilnya
$a++Post-incrementKembalikan nilai $a, lalu tambahkan $a dengan 1
--$aPre-decrementKurangi $a dengan 1, lalu kembalikan hasilnya
$a--Post-decrementKembalikan nilai $a, lalu kurangi $a dengan 1

Contoh:

// INCREMENT
// pre
$b = 3;
var_dump(++$b); // int(4)
var_dump($b); // int(4)

// post
$a = 3;
var_dump($a++); // int(3)
var_dump($a); // int(4)


// DECREMENT
// pre
$c = 3;
var_dump(--$c); // int(2)
var_dump($c); // int(2)

// post
$d = 3;
var_dump($d--); // int(3)
var_dump($d); // int(2)

Operator Bitwise

Operator biwise merupakan operator yang bekerja pada nilai biner meskipun operan menggunakan bilangan bulat atau integer.

Berikut daftar operator bitwise yang dapat digunakan:

SintaksNama
$a & $bAND
$a || $bOr
$a ^ $bXor
~ $aNot
$a << $bShift left
$a >> $bShift right

Operator Tipe

Operator tipe hanya ada satu, yaitu instanceof. Operator ini digunakan untuk memeriksa apakah sebuah variabel adalah instance object dari kelas tertentu atau bukan.

Contoh:

class Person {}
$person = new Person();

var_dump($person instanceof Person); // bool(true)

Operator Array

Operator array merupakan operator yang bisa kita gunakan untuk melakukan operasi dengan tipe data array.

Berikut daftar operator array:

SintaksNamaHasil
$a + $bGabungkanGabungkan elemen $b yang tidak ada di $a
$a == $bKunci dan Nilai samatrue, jika $a dan $b memiliki kunci dan nilai yang sama
$a === $bKunci dan Nilai bertipe samatrue, jika $a dan $b memiliki kunci dan nilai yang sama dalam urutan dan tipe yang sama
$a != $b atau $a <> $bKunci dan nilai tidak samatrue, jika a dan b tidak memiliki kunci dan nilai yang sama
$a !== $bKunci dan nilai bertipe tidak samatrue, jika $a dan $b tidak memiliki kunci dan nilai yang sama dan bertipe sama

Contoh:

var_dump([ 'nama' => 'reza' ] + [ 'umur' => 20 ]);
// array(2) {
//   ["nama"]=>
//   string(4) "reza"
//   ["umur"]=>
//   int(20)
// }

var_dump([1] == ['1']); // bool(true)
var_dump([1] === [1]); // bool(true)

var_dump([1] != ['1']); // bool(false)
var_dump([1] !== ['1']); // bool(true)

Operator Eksekusi

Operator eksekusi adalah operator untuk mengeksekusi perintah shell, operator shell diawali dengan tanda backtick (`) dan diakhiri dengan tanda yang sama, diantara tanda backtick kita bisa menulis perintah shell yang nantinya akan dieksekusi oleh PHP.

Operator ini adalah alternatif fungsi shell_exec() keduanya memiliki perilaku yang sama.

Sintaks

`perintah shell`

Nilai Kembalian

Mengembalikan string jika perintah mengembalikan output, false jika pipe tidak dapat dibuat, atau null jika perintah tidak menghasilkan output atau error.

Contoh jika menggunakan shell linux:

$output = `ls -la`;

var_dump($output);
// string(147) "total 12
// drwxr-xr-x 2 reza reza 4096 Sep 30 09:27 .
// drwxr-xr-x 8 reza reza 4096 Sep 19 21:34 ..
// -rw-r--r-- 1 reza reza  355 Oct  4 14:26 index.php
// "

Perintah ls -la digunakan untuk melihat daftar file atau direktori linux, jika Anda menggunakan Windows gunakan perintah dir.

Contoh jika menggunakan Windows:

$output = `dir`;

var_dump($output);
// string(336) " Volume in drive C has no label.
//  Volume Serial Number is xxx-xxxx

//  Directory of C:\Users\Reza\CODE\belajar-php

// 21/09/2022  09:29    <DIR>          .
// 20/09/2022  11:55    <DIR>          ..
// 04/10/2022  13:18                43 index.php
//                1 File(s)             43 bytes
//                2 Dir(s)  183.321.088.000 bytes free
// "