Menu

Operator Perbandingan PHP: == vs === dan <=>

PHP membandingkan nilai dengan == (sama setelah type juggling), === (nilai sama dan tipenya sama), != dan !==, < > <= >= serta operator spaceship <=>. Pelajari kapan == mengonversi tipe, apa yang berubah di PHP 8, dan lihat semua perbandingan longgar dan strict dalam satu tabel.

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

== memeriksa apakah dua nilai sama setelah PHP mengonversinya ke tipe yang sama. === memeriksa bahwa keduanya sama dan bertipe sama. Jadi 1 == "1" bernilai true, sedangkan 1 === "1" bernilai false.

Kebanyakan bug perbandingan berasal dari == yang mengonversi sesuatu di luar dugaanmu. Kebiasaan bawaan yang baik adalah memakai === dan !==, lalu beralih ke == hanya saat kamu tahu kamu memang menginginkan konversinya.

Semua operator perbandingan PHP

OperatorNamaBernilai true saat
$a == $bSama dengansama setelah type juggling
$a === $bIdentiksama dan tipenya sama
$a != $b, $a <> $bTidak sama dengantidak sama setelah type juggling
$a !== $bTidak identiktidak sama, atau tipenya berbeda
$a < $b, $a > $bKurang dari, lebih dari
$a <= $b, $a >= $bKurang dari atau sama dengan, lebih dari atau sama dengan
$a <=> $bSpaceshipmengembalikan -1, 0, atau 1

Tabel perbandingan longgar dan strict

Setiap sel di tabel ini dihitung oleh PHP 8.3. Pindah antara == dan ===, lalu ketuk sebuah sel untuk melihat ekspresinya. Tabel == penuh kejutan di baris untuk null, "", "0", dan []; tabel === hanya berisi diagonalnya.

Perbandingan longgar (==) dan strict (===)
Point at or tap a cell to read it as PHP.
$a == $btruefalse10-1"1""0"""null[]"php""10""1e1"
true
false
1
0
-1
"1"
"0"
""
null
[]
"php"
"10"
"1e1"
Every cell computed by PHP 8.3.19.

Cara == membandingkan tipe yang berbeda

Aturan yang diikuti PHP 8, diurutkan sesuai seberapa penting dalam praktik:

  1. Dua string numerik dibandingkan sebagai angka: "10" == "1e1" dan "1" == "01" sama-sama true.
  2. Angka dan string numerik: string-nya menjadi angka. 100 == "1e2" bernilai true.
  3. Angka dan string non-numerik: sejak PHP 8, angkanya menjadi string dan keduanya dibandingkan sebagai string. 0 == "a" bernilai false (di PHP 7 hasilnya true).
  4. Apa pun dengan bool: kedua sisi dikonversi menjadi bool. "a" == true dan [] == false bernilai true.
  5. null dan string: null menjadi "", jadi null == "" bernilai true tetapi null == "0" bernilai false. Terhadap tipe lainnya, null dibandingkan sebagai false.
  6. Dua array: sama kalau keduanya punya pasangan key/value yang sama.

Baris terakhir menunjukkan kenapa perbandingan urutan dengan null jarang masuk akal: null menjadi false, -1 menjadi true, dan false < true.

Tidak sama: != vs !==

!= dan <> adalah operator yang sama. !== adalah versi strict-nya. Perbedaannya paling terasa pada fungsi yang mengembalikan 0 atau false, seperti strpos:

0 != false bernilai false karena 0 dikonversi menjadi false. 0 !== false bernilai true karena int bukan bool. Jebakan yang sama berlaku untuk array_search dan untuk in_array tanpa flag strict-nya.

Membandingkan string

< dan > membandingkan string byte demi byte (urut abjad untuk ASCII biasa). Kalau kedua string numerik, keduanya dibandingkan sebagai angka. Untuk urutan tanpa membedakan huruf besar kecil atau urutan "natural", pakai fungsi-fungsi ini:

Operator spaceship <=>

$a <=> $b mengembalikan -1 saat $a lebih kecil, 0 saat keduanya sama, dan 1 saat $a lebih besar. Operator ini memakai aturan yang sama dengan < dan ==, dan merupakan cara terpendek untuk menulis callback pengurutan.

Membandingkan dua array dengan <=> berarti membandingkannya elemen demi elemen. Begitulah callback tadi mengurutkan berdasarkan usia lebih dulu, lalu nama. Resep pengurutan lainnya ada di halaman mengurutkan array.

Kesalahan umum: membandingkan float dengan ==

Float disimpan dalam bentuk biner, jadi banyak nilai desimal hanyalah perkiraan. 0.1 + 0.2 tidak persis 0.3, dan == melihat perbedaannya.

Untuk uang, simpan dalam satuan sen sebagai integer dan bandingkan dengan ===.

Pertanyaan yang sering diajukan

Apa bedanya == dan === di PHP?

== mengonversi kedua sisi ke tipe yang sama lalu membandingkan, jadi 1 == "1" bernilai true. === bernilai true hanya kalau nilainya sama dan tipenya juga sama, jadi 1 === "1" bernilai false. Pakai === kecuali kamu memang menginginkan konversinya.

Apakah 0 == "a" bernilai true di PHP?

Tidak lagi sejak PHP 8. Saat angka dibandingkan dengan string yang tidak numerik, PHP 8 membandingkan keduanya sebagai string, jadi 0 == "a" bernilai false. Di PHP 7, string itu dikonversi menjadi 0 dan hasilnya true.

Apa bedanya != dan !== di PHP?

!= (dan aliasnya <>) adalah kebalikan ==: hasilnya false saat nilainya sama setelah konversi tipe. !== adalah kebalikan ===: hasilnya true saat nilainya berbeda atau tipenya berbeda, jadi 0 !== false bernilai true sedangkan 0 != false bernilai false.

Bagaimana cara membandingkan dua float di PHP?

Jangan pakai == pada hasil aritmetika float: 0.1 + 0.2 == 0.3 bernilai false. Bandingkan selisihnya dengan toleransi kecil: abs($a - $b) < PHP_FLOAT_EPSILON, atau bulatkan keduanya ke presisi yang kamu perlukan.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai