0

Keanehan di bahasa pemrograman PHP yang bisa bikin fatal sebuah aplikasi

– 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 true. Contoh scriptnya ada dibawah :

<?php
$varA = 0;
$varB = "";

// cek pertama
if($varA == $varB){
	echo "<p>true</p>";
}else{
	echo "<p>false</p>";
}

// cek kedua
if(empty($varA)){
	echo "<p>true</p>";
}
?>>

outputnya :
keanehan di bahasa pemrograman PHP

Tuh, aneh kan?.
Buat yang udah mahir di PHP, pastinya udah tau lah ya keanehan ini. Tapi buat yang baru/awam di PHP?, mungkin gak tau. Jadi hati-hati buat kalian saat 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
$varA = 0;
$varB = "";

// cek pertama
if($varA === $varB){
	echo "<p>true</p>";
}else{
	echo "<p>false</p>";
}

// cek kedua
if(empty($varA)){
	echo "<p>true</p>";
}
?>

outputnya :
identical operator php
Masih ada yg aneh gak bro dari gambar diatas? Kalo saya sih ada.
Anehnya itu, hasil echo kedua(line 14) 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
$array = array(0,1,2);

if(in_array("Moko", $array)){
	echo "<p>true</p>";
}else{
	echo "<p>false</p>";
}
?>

Outputnya :
keanehan in_array() di php
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
$array = array(0,1,2);

if(in_array("Moko", $array, true)){
	echo "<p>true</p>";
}else{
	echo "<p>false</p>";
}
?>

Outputnya :
in_array() with parameter true PHP

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! 🙂

[related_post themes="text" id="4508"]

Ambar Hasbiyatmoko

Hello, I’m web developer. Passionate about programming, networking and web server. @kaskus  @facebook

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.