ffCCBot/2.0 (http://commoncrawl.org/faq/)
NEW!! Buku Query MySQL Lihat Detail » x

Memahami Tipe Data Pada PHP

Hai sobat, pada kesempatan kali ini kita akan membahas sedikit teori dalam bahasa pemrograman beserta sedikit contoh aplikasinya di lapangan, kali ini tentang tipe data pada php.

I. Tipe Data Pada PHP (Data Type)

Apa itu tipe data?

Bagi sobat yang sudah memahami bahasa pemrograman lain atau terbiasa mendesain database pasti tidak asing lagi dengan istilah tipe data.

Tipe data adalah data dengan jenis tertentu dengan karakteristik tertentu.

Strict atau Longgar?

Setiap bahasa pemrograman memiliki kebijakan sendiri terkait tipe data. Ada yang strict (ketat) ada yang longgar, strict artinya tipe data harus benar benar sesuai dengan yang disyaratkan.

Misal untuk melakukan operasi matematika, data yang terlibat harus ber tipe integer, demikian juga untuk string, jika tidak maka akan muncul pesan error atau output yang dihasilkan akan tidak sesuai dengan harapan.

Lantas, bagaimana dengan PHP?

PHP sendiri termasuk bahasa pemrograman yang longgar untuk masalah tipe data, ketika menggunakan PHP, kita tidak perlu dipusingkan dengan tipe data, karena ketika melakukan operasi, PHP akan otomatis mengubah nilai sesuai dengan tipe data yang diperlukan.

Misal: jika kita memiliki angka dalam bentuk string, entah angka hasil pengambilan data dari database, hasil regex/pemecahan dari string lain dan kita lakukan operasi aritmetika, maka kita tidak akan mendapati error dan akan memperoleh hasil sesuai dengan yang kita harapkan, misal:

<?php
$nilai = 'Nilai UAS = 9';
echo substr($nilai,-1) + 5; // 14
?>

Pada contoh diatas, fungsi substr($nilai,-1) akan menghasilkan angka 9 dengan tipe data string lalu kita jumlahkan dengan 9 yang memiliki tipe data integer, hasilnya adalah 14 dengan tipe data integer.

Kenapa demikian?

Karena pada operasi aritmetika, di belakang layar PHP akan mengubah tipe data string tadi ke integer, sehingga akan sama tipe datanya, proses pengubahan ini disebut type juggling.

Pada contoh lain, misal kita akan melakukan operasi string pada integer, maka PHP akan mengubah tipe data bilangan tersebut menjadi string, misal:

<?php
$angka = 12345;
echo substr(12345, 3);
?>

Script diatas akan menghasilkan string 45.

Pendefinisian Tipe Data Pada PHP

Pada PHP, saat mendeklarasikan variabel, kita tidak perlu mendefinisikan tipe data (fitur default PHP), misal:

$harga = '1000'; // Tipe data string

PHP akan otomatis mendeteksi tipe data dari nilai yang kita berikan, misal ketika nilai diawali dengan tanda kutip maka otomatis dianggap string.

Bagaimana dengan bahasa pemrograman lain seperti java? di Java, ketika mendefinisikan variabel, kita harus memilih tipe data untuk variabel tersebut, misal:

int harga;
harga = 1000;

Meskipun memiliki kelemahan, dengan tidak mendefinisikan tipe data, dapat memudahkan dan mempercepat kita dalam mengembangkan aplikasi.

Jenis Tipe Data Pada PHP

Lantas tipe data apa yang disupport oleh PHP? berikut ini daftarnya:

  1. Integer. berupa angka tampa desimal dan tanpa awalah 0.
    $nilai = 10;
    echo $nilai; // 10;
    
    $nilai2 = 01234;
    echo $nilai2; // 668 - bilangan octal

    Note: Jika integer diawali denga 0 maka menjadi sistem bilangan octal, seperti pada contoh $nilai2 diatas.

  2. String. berupa karakter, baik angka, huruf, karakter khusus, dll. Penulisannya diapit dengan satu tanda kutip '' atau dua tanda kutip "", misal: $nilai = '10' lebih jauh tentang string dapat dibaca disini.
  3. Float. berupa angka dengan desimal (desimal separatornya berupa titik), misal: $nilai = 7.5
  4. Booleans. berupa true atau false, misal:
    $aktif = false;
    if (date('Y-m-d') > "2017-12-1") {
    	$aktif = true;
    }
    
    if ($aktif) {
    	echo 'aktif';
    }
  5. Array. berupa array, misal:
    $array = array('Mobil', 'Motor');
    print_r($array);
  6. Object. berupa objek (instansi dari class), misal:
    class User {
    	...
    }
    
    $obj = new User; // Variabel $obj berisi data dengan tipe objek

II. Type Juggling

Pada bagian sebelumnya telah disinggung sekilas mengenai type juggling dimana untuk kebutuhan tertentu dibelakang layar PHP dapat mengubah tipe data suatu variabel.

Umumnya type juggling terjadi pada dua keadaan, yaitu (1) pada penggunaan operator aritmetika dan (2) penggunaan fungsi string.

Contoh type juggling ketika menggunakan operator aritmetika adalah sebagai:

$harga = 1000; // integer
$diskon = 0.5; // float
$diskon = 1000 * 0.5; // variabel harga menjadi float
$harga = $harga - $diskon; // float

Contoh type juggling ketika menggunakan fungsi string adalah sebagai berikut:

$harga = 1000;
$harga = 'Total harga ' .  $harga;
echo $harga; // Total harga 1000 -> variabel $harga memiliki tipe data string

Selain operasi aritmetika dan string, type juggling juga terjadi ketika ada perbandingan dua variabel, misal ketika menggunakan pada operator pembanding sebagai berikut:

$nilai 	= '10';
$nilai2 = '5';
if ($nilai > $nilai2) {
	echo 'Benar';
} 
// Output: Benar

Pada contoh diatas, sebelum PHP membandingkan kedua nilai, PHP akan mengubah keduanya menjadi integer.

Intinya : ketika kita melakukan operasi pada suatu nilai atau variabel, secara otomatis PHP akan menyesuaikan tipe data nya, sehingga kita akan selalu memperoleh hasil sesuai dengan yang kita harapkan

II. Type Casting Pada PHP

Type casting artinya merubah tipe data dari bentuk satu ke bentuk lain, bedanya dengan type juggling adalah pada type casting ini, kita sendiri yang merubah tipe datanya secara manual menggunakan keyword tertentu.

Untuk melakukan type casting, kita gunakan keyword sesuai dengan type data nya, misal int, string, dll dengan menggunakan tanda kurung, contohnya adalah sebagai berikut:

  1. (int) atau (integer) untuk tipe data integer.
  2. (string) untuk tipe data string.
  3. (bool), (boolean) untuk tipe data boolean.
  4. (array) untuk tipe data array
  5. (object) untuk tipe data object
  6. (null) untuk tipe data NULL.

Contoh penggunaan:

$nilai = 'Nilai 10';
(int) $nilai;
echo $nilai; // 10

Penggunaan spasi di dalam tanda kurung diperbolehkan, misal ( int) atau (int  )

Apakah Perlu Menggunakan Type Casting?

Pertanyaan selanjutnya adalah, dalam praktek, apakah kita perlu menggunakan type casting? bukankah sudah ada type juggling, dimana secara otomatis PHP telah mengubah tipe data sesuai dengan kondisi yang ada?

Jawabannya adalah jarang sekali atau hampir tidak pernah, hanya sesekali saja. ini pengalaman saya pribadi ya, jika sobat memiliki pengalaman berbeda, silakan sharing di kolom komentar.

Beberapa contoh kondisi yang memerlukan type casting adalah sebagai berikut:

Contoh 1:

Pada contoh pertama ini kita ingin menghilangkan angka nol baik di depan maupun di belakang angka.

Sebagai contoh misal pada inputan bulan yang terdiri dari dua digit, misal: 01, 02, dst.. kita ubah menjadi satu digit: 1, 2, 3, dst…

Misal kita memiliki form HTML dan menampilkan menu drop down nama bulan seperti ini:

<form method="post" action="">
<select name="bulan">
<option value="01">Januari</option>
<option value="02">Februari</option>
<option value="03">Maret</option>
</select>
</form>>

Selanjutnya ketika form disubmit, kita tangkap data bulan dengan script berikut:

$bulan = (int) $_POST['bulan'];

Pada script diatas, variabel $bulan akan berisi digit bulan tanpa awalan 0.

Tapi… bukankah ada cara lain? ya, seperti ini:

$bulan = trim($_POST['bulan'], '0');

atau bisa juga pakai fungsi  substr()

Dari ketiganya, saya pribadi lebih memilih menggunakan cara pertama karena lebih simpel dan lebih jelas bahwa hasilnya adalah angka (integer).

Contoh 2:

Contoh selanjutnya adalah untuk menghilangkan desimal angka 0, misal pada database korporasi, kita memiliki tabel penelitian dengan bentuk sebagai berikut:

id kode_penelitian score
1 A001 725.456
2 A011 821.500
3 A201 672.000

Ketika melakukan pengambilan data nilai, maka nilai nol di belakang koma akan tetap ada, sehingga kurang pas jika ditampilkan semua, untuk itu perlu kita cast dengan float, misal:

$conn = mysqli_connect('localhost', 'root', '', 'korporasi');
$query = mysqli_query($conn, 'select score FROM penelitian');
	
while ($row = mysqli_fetch_array($query)) {
	echo $row['kode_penelitian'] . ': ' . (float) $row['score'] . '<br/>';
}
/* Hasil:
A001: 725.456
A011: 821.5
A201: 672 */

Contoh 3:

Contoh lain adalah ketika ingin memasukkan nilai pada tabel database, misal ketika data yang dimasukkan harus integer, maka kita cast data tersebut menjadi integer, untuk memastikan nilai yang masuk sesuai dengan jenis data yang ditentukan.

Atau untuk mencegah SQL injection ketika melakukan pencocokan data pada database.

Bagaimana? apakah sobat memiliki pengalaman lain? kalau ada, share di bagian komentar ya.

III. Menguji Tipe Data Pada PHP

Pada kondisi tertentu, kita perlu untuk menguji tipe data untuk memastikan bahwa data yang akan kita olah memiliki tipe data yang sesuai dengan yang kita harapkan.

Untuk menguji tipe data, kita gunakan fungsi is_xxx diantaranya adalah:

  • is_string() untuk menguji apakah nilai berupa string;
  • is_int() atau is_integer() untuk  menguji apakah nilai berupa integer;
  • is_array() untuk menguji apakah nilai berupa array;
  • is_object() untuk menguji apakah nilai berupa object;
  • is_float() untuk menguji apakah nilai berupa float.

Misal:

$nilai  = 10;
is_int($nilai); // true

$harga  = '10000';
is_string($harga); // true

$array = array(10);
is_array($array); // true

Kapan pengujian tipe data ini dilakukan?

Dalam praktek, pengujian nilai ini digunakan untuk menguji argumen yang dimasukkan kedalam fungsi, misal kita buat fungsi untuk memecah string sebagai berikut:

function cut_text($kata) {
	if(!is_string($kata)) {
		return false;
	}
	
	return substr($kata, 0, 100);
}

Atau untuk argumen array, misal:

function split_array ($array) {
	if(!is_array($kata)) {
		return false;
	}
	
	foreach ($array as $key => $val) {
		...
	}
}

IV. Fungsi is_numeric()

Perlu diperhatikan bahwa integer berbeda dengan numeric, suatu nilai disebut integer jika nilai tersebut merupakan bilangan bulat (tidak ada karakter selain angka, termasuk titik dan koma).

Sedangkan untuk numeric cakupannya lebih luas, jika suatu nilai baik string maupun integer yang terdiri dari digit angka 0 s.d 9 dan separator desimal, maka tercakup dalam kriteria numeric, sehingga bisa menggunakan validasi is_numeric(), misal:

$nilai = '10';
var_dump(is_numeric($nilai)); // bool(true)
var_dump(is_int($nilai)); // bool(false)

$nilai = '10.0';
var_dump(is_numeric($nilai)); // bool(true)

$nilai = '10,0';
var_dump(is_numeric($nilai)); // bool(false)

Perhatikan bahwa script terakhir bernilai false karena terdapat tanda koma (,), dimana koma bukanlah separator desimal. Tapi.. bukankah separator desimal yang biasa kita gunakan adalah koma? apakah kita bisa mengubah titik agar bisa menjadi koma?

Jawabnya tidak, PHP secara khusus menggunakan titik sebagai separator desimal, apapun setting regional yang ada di komputer kita.

V. Type Hinting

Type hinting digunakan untuk menerapkan batasan parameter yang dimasukkan pada fungsi atau method (pada OOP) agar sesuai dengan tipe data yang telah ditentukan.

Dengan type hinting ini, kita bisa memaksa pengguna fungsi untuk memasukkan argumen sesuai dengan tipe data yang telah ditetapkan.

Type hinting ini bisa digunakan untuk data objek, interface, data primitive (string, integer, float), dan sebagainya. Contoh penggunaan type hinting adalah sebagai berikut:

function cutText(string $kata) {
	return substr($kata, 0, 100) . '...';
}

cutText(123);

Ketika dijalankan maka kita akan mendapatkan pesan error sebagai berikut:

Catchable fatal error: Argument 1 passed to cutText() must be an instance of string, integer given, called in...

Error tersebut karena kita memasukkan argumen dengan tipe data integer.

Bagaimana dengan fungsi is_xxx?

Jika kita perhatikan, bentuk validasi ini mirip dengan validasi menggunakan fungsi is_xxx yang telah kita bahas pada bagian sebelumnya.

function cutText($kata) {
	if (!is_string($kata))
		return false;
		
	return substr($kata, 0, 100) . '...';
}

cutText(123);

Lalu apa bedanya? bukankan fungsinya sama saja?

Ya, fungsinya sama saja, sama sama memastikan bahwa tipe data sesuai dengan yang kita inginkan, namun keduanya memiliki perbedaan, diantaranya adalah:

  1. Pada type hint, jika terjadi error, maka akan menghasilkan fatal error, sehingga script berhenti dieksekusi (script berikutnya tidak dieksekusi)
  2. Type hint tidak bisa digunakan untuk lebih dari satu tipe data, misal kita tidak bisa membuat argumen memiliki tipe data string atau integer, hanya bisa satu, string saja atau integer saja.

Jadi, silakan gunakan sesuai dengan kebutuhan Anda, khusus untuk OOP, sebaiknya gunakan type hint.

VI. Penutup

PHP tidak strict terhadap tipe data, namun demikian, PHP menyediakan banyak fitur untuk memudahkan kita bekerja dengan tipe data.

Secara umum kita dapat “mengabaikan” tipe data ini, karena sudah dihandle dengan baik oleh PHP, namun dengan pengetahuan yang lebih mengenai tipe data, akan lebih menambah kemampuan coding kita.

Demikian pembahasan mengenai tipe data pada PHP, semoga dapat bermanfaat.

Subscibe Now

Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com

Recomended Post

2 Feedback dari pembaca

Silakan tinggalkan komentar

*

Newsletter

Jadilah yang pertama tahu berita terbaru dari Jagowebdev.com

Like Us

  1. Memahami Tipe Data Pada PHP

  2. Query MySQL di Dalam PHP Loop – Bad Practice !!!

  3. Software Kompres dan Optimasi Gambar / Foto (JPG dan PNG) – Tested

  4. 40+ Theme WordPress Gratis Untuk Blog – Modern & Responsive

  5. Eksklusif Cheat Sheet PHP Bahasa Indonesia – Pendamping Belajar PHP

  6. PHP FORM III: Menampilkan Data MySQL Dengan PHP dan Form HTML

  7. Tutorial PHP Form II: Menampilkan Hasil Input Form HTML dengan PHP

  8. Tutorial PHP Form I: Menghubungkan Form HTML dengan PHP

  9. Menampilkan Data Dari Beberapa Tabel MySQL – JOIN Pada MYSQL

  10. Memahami dan Menampilkan Tanggal dan Waktu Pada PHP