– TUTORIAL : Keanehan di bahasa pemrograman PHP –
Sebelum kalian membuat sebuah aplikasi dengan bahasa pemrograman PHP, ada baiknya kalian membaca postingan saya dibawah ini, kenapa? Karena ada beberapa keanehan di PHP. Keanehan itu sifatnya simpel sekali, tapi bisa bikin fatal(bugs) sebuah aplikasi. Yuk simak apa saja keanehan itu 🙂
1) 0 == “” (true)
Di PHP, ternyata angka nol(0) tu dianggap kosong/empty (“”). Jadi jika kalian membandingkan apakah sama angka 0 dengan “” ..?, maka hasilnya ya, sama (true
). Contoh scriptnya ada dibawah :
<?php<br> $varA = 0;<br> $varB = "";</p> <p>// cek pertama<br> if($varA == $varB){<br> echo "<p>true</p>";<br> }else{<br> echo "<p>false</p>";<br> }</p> <p>// cek kedua<br> if(empty($varA)){<br> echo "<p>true</p>";<br> }<br> ?>>
Tuh, aneh kan?.
Buat yang udah mahir di PHP, pastinya udah tau lah ya keanehan ini. Tapi buat yang baru/awan di PHP?, mungkin gak tau. Jadi hati-hati buat kalian jika ingin melakukan pengecekan seperti ini. Pengecekan kaya gini biasanya dipakai saat mengecek field status
pada database. Dimana field status
ini berfungsi untuk menandai apakah suatu data sudah dihapus atau belum? Jika statusnya 0 maka data tidak tampil di user, sedangkan status 1 tampil.
Terus solusinya gimana?
Solusinya adalah dengan mengganti operator equal(==) dengan identical(===). Nah bedanya operator equal dengan identical itu apa? Gini bro, kalo equal itu cuma membandingkan apakah var a dan var b itu bernilai sama. Jadi jika kalian membandingkan angka 0 == “”, maka hasilnya akan bernilai true
. (*Sekedar catatan, Di PHP angka 0 itu dianggap kosong/empty), cek disini. Nah, beda dengan operator identical, Operator ini akan menyamakan nilai beserta tipe datanya. Jika dilakukan pengecekan antara 0 === “”, maka akan bernilai false
, karena 0 itu bertipe integer sedangkan “” bertipe string (jadi tipenya tidak sama).
Contoh perbaikan scriptnya seperti ini :
<?php<br> $varA = 0;<br> $varB = "";</p> <p>// cek pertama<br> if($varA === $varB){<br> echo "<p>true</p>";<br> }else{<br> echo "<p>false</p>";<br> }</p> <p>// cek kedua<br> if(empty($varA)){<br> echo "<p>true</p>";<br> }<br> ?>
outputnya :
Masih ada yg aneh gak bro dari gambar diatas? Kalo saya sih ada.
Anehnya itu, hasil echo kedua tetap bernilai true
. Kenapa? karena fungsi empty()
itu mengecek value bernilai kosong/empty. Sedangkan angka 0 itu termasuk empty kalo di PHP.
So, sangat tidak disarankan mengecek angka 0 dengan fungsi empty().
2) Keanehan fungsi in_array()
Keanehannya adalah, misalkan saya mau cari nama saya sendiri (moko) didalam sebuah array, maka hasilnya akan bernilai true
. (*Padahal di dalam array tersebut tidak ada nama saya).
Untuk lebih jelasnya lihat script berikut :
<?php<br> $array = array(0,1,2);</p> <p>if(in_array("Moko", $array)){<br> echo "<p>true</p>";<br> }else{<br> echo "<p>false</p>";<br> }<br> ?>
Outputnya :
Aneh lagi kan? Haha.
Kenapa hasilnya bisa true
?. Karena ada angka 0 pada array tersebut. Jika kamu hapus angka 0, pasti akan bernilai false
, coba saja deh 🙂 . So, yang jadi masalah itu angka 0-nya.
Terus solusinya gimana?
Solusinya adalah dengan menambahkan parameter true
pada fungsi in_array()
.
Fungsi parameter true
adalah untuk menyocokkan tipe datanya apakah benar2 sama (Identical ===).
Perbaikan scriptnya jadi seperti ini :
<?php<br> $array = array(0,1,2);</p> <p>if(in_array("Moko", $array, true)){<br> echo "<p>true</p>";<br> }else{<br> echo "<p>false</p>";<br> }<br> ?>
Tuh, hasilnya jadi false. Berarti benar ya, kata “moko” tidak ada di dalam array tersebut. Sip!.
KESIMPULAN
– Angka 0 itu dianggap kosong/empty kalo di PHP
– Jangan gunain fungsi empty() jika ingin mengecek angka 0
– Gunakan operator Identical (===) jika ingin membandingkan angka 0 dan “”
Nah itu dia keanehan-keanehan di PHP. Sekian penjelasannya, semoga bermanfaat buat kalian! 🙂