Setiap keputusan dalam program bermuara pada satu pertanyaan: benar atau salah? Apakah pengguna sudah login, apakah stok habis, apakah formulir sudah lengkap — semuanya dijawab oleh tipe bool (boolean) yang hanya memiliki dua nilai: true dan false. Tipe ini sederhana, tetapi justru di situlah bahayanya: PHP secara otomatis mengubah nilai tipe lain menjadi boolean saat kondisi dievaluasi, dan aturan konversinya menyimpan beberapa kejutan. Pada Chapter ini kita petakan aturan truthy (dianggap benar) dan falsy (dianggap salah) secara lengkap.
Nilai true dan false #
Boolean ditulis dengan kata kunci true dan false — tidak sensitif terhadap kapitalisasi, meskipun konvensi umum memakai huruf kecil:
<?php
$loginBerhasil = true;
$sudahDihapus = FALSE;
var_dump($loginBerhasil, $sudahDihapus);
var_dump(is_bool($loginBerhasil));Output yang Dihasilkan:
bool(true)
bool(false)
bool(true)var_dump() menampilkan bool(true) dan bool(false) — penulisan FALSE pun tetap dikenali sebagai nilai yang sama. Fungsi is_bool() memastikan sebuah nilai bertipe boolean. Satu keunikan muncul saat boolean dicetak: true tampil sebagai 1, sedangkan false tidak menampilkan apa-apa (string kosong):
<?php
echo true, "\n";
echo false, "|\n";
var_dump((string)true, (string)false);Output yang Dihasilkan:
1
|
string(1) "1"
string(0) ""Baris kedua terlihat hanya berisi karakter | karena false dikonversi menjadi string kosong. Inilah alasan mencetak boolean secara langsung jarang membantu — var_dump() jauh lebih informatif untuk mengamati nilainya.
Konversi ke Boolean: Truthy dan Falsy #
Kekuatan sekaligus jebakan boolean ada pada konversi otomatisnya. Ketika PHP membutuhkan boolean (misalnya dalam kondisi if yang akan kita pelajari pada Section Control Flow), nilai bertipe lain diubah mengikuti aturan tetap. Daftar nilai yang menjadi false — disebut falsy — benar-benar tertutup dan tidak lebih dari ini:
| Nilai | Tipe |
|---|---|
false | bool |
0 dan -0 | int |
0.0 dan -0.0 | float |
"" (string kosong) | string |
"0" (string berisi karakter nol) | string |
[] (array kosong) | array |
null | null |
Segala nilai di luar daftar itu menjadi true (truthy). Mari kita buktikan yang paling sering mengejutkan:
<?php
var_dump((bool)0, (bool)-1, (bool)0.0);
var_dump((bool)"", (bool)"0", (bool)"00", (bool)"0.0", (bool)" ");
var_dump((bool)[], (bool)[0], (bool)null);Output yang Dihasilkan:
bool(false)
bool(true)
bool(false)
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
bool(false)
bool(true)
bool(false)Perhatikan tiga kasus yang menabrak intuisi. Pertama, -1 adalah truthy — hanya nol yang falsy, bukan bilangan negatif. Kedua, string "00", "0.0", dan " " (berisi satu spasi) semuanya truthy; satu-satunya string falsy selain string kosong adalah "0" persis. Ketiga, array [0] bernilai true karena memuat satu elemen — array hanya falsy ketika benar-benar kosong.
Konversi dari Boolean #
Arah sebaliknya juga berlaku: boolean yang dipakai dalam konteks angka menjadi 1 dan 0, dan dalam konteks string menjadi "1" dan "":
<?php
var_dump((int)true, (int)false);
var_dump(true + true);
var_dump(1 == true, 0 == false);Output yang Dihasilkan:
int(1)
int(0)
int(2)
bool(true)
bool(true)Cast (int)true menghasilkan 1, sehingga true + true pun menghasilkan 2 — boolean ikut dijumlahkan sebagai angka. Perbandingan 1 == true menghasilkan true karena operator longgar == mengonversi kedua sisi ke tipe yang sama sebelum membandingkan; operator ketat === yang menolak konversi akan kita bahas tuntas di Chapter Type Juggling
.
Truthiness Object dan Data Eksternal #
Object adalah kasus khusus yang menohok: object selalu bernilai true, sekalipun propertinya kosong. Bandingkan dengan array:
<?php
$keranjangKosong = [];
$profilKosong = new stdClass(); // object kosong bawaan PHP
var_dump((bool)$keranjangKosong, (bool)$profilKosong);Output yang Dihasilkan:
bool(false)
bool(true)Array kosong bernilai false, tetapi stdClass yang sama-sama kosong bernilai true — tipe object dibahas tuntas pada Chapter Objects
. Perilaku serupa berlaku untuk data dari luar program. Nilai dari formulir HTML dan query string selalu tiba sebagai string, sehingga truthiness-nya mengikuti aturan string di atas:
<?php
$dataForm = [
"umur" => "0",
"berat" => "0.0",
"nama" => "",
];
var_dump((bool)$dataForm["umur"]);
var_dump((bool)$dataForm["berat"]);
var_dump($dataForm["nama"] === "");
var_dump($dataForm["umur"] !== "");Output yang Dihasilkan:
bool(false)
bool(true)
bool(true)
bool(true)Kolom umur berisi "0" sehingga falsy, sementara berat berisi "0.0" sehingga truthy — dua nilai yang secara manusiawi sama-sama “nol” diperlakukan berbeda. Dua baris terakhir menunjukkan pola yang lebih aman: bandingkan secara eksplisit terhadap string kosong untuk mengetahui apakah sebuah kolom terisi.
Ringkasan #
Boolean hanya memiliki true dan false, dengan daftar falsy yang tertutup: false, nol dalam semua bentuk, string kosong dan "0", array kosong, serta null — selebihnya truthy, termasuk "0.0", " ", array [0], dan semua object. Boolean menjadi 1/0 dalam konteks angka dan "1"/"" dalam konteks string. Nilai null yang menjadi tetangga terdekat falsy ini pantas dibedah tersendiri — itulah chapter berikutnya.