PHP Menengah
Site: | Elearning Muhidin Saimin |
Course: | Web Development |
Book: | PHP Menengah |
Printed by: | Guest user |
Date: | Tuesday, 17 September 2024, 3:40 AM |
Description
Tutorial Belajar PHP Tingkat Menengah
Table of contents
- 1. Tanggal dan Waktu (Prosedural)
- 2. Tanggal dan Waktu (Objek)
- 3. Hari dan Bulan (Indonesia)
- 4. Include dan Require
- 5. Ruang Lingkup Variabel
- 6. Variabel Super Global
- 7. Konversi Tipe Data
- 8. Mengenal stdClass
- 9. JSON
- 10. Penanganan Error 1
- 11. Penanganan Exception
- 12. Manipulasi File 1
- 13. Manipulasi File 2
- 14. Regular Expression
1. Tanggal dan Waktu (Prosedural)
PHP: Bekerja Dengan Tanggal Dan Waktu (Prosedural)
Selamat datang di pertemuan pertama dari seri tutorial PHP kelas menengah.
Pada pertemuan kali ini, kita akan mempelajari hal-hal yang berkaitan dengan tanggal dan waktu di PHP. Mulai dari cara membuat date time
, mengekstrak string menjadi date time
, menampilkan tanggal dan waktu dalam format tertentu, hingga memanipulasi tanggal dan waktu.
Pembahasan tentang tanggal dan waktu pada PHP ini kita bagi dalam 2 pertemuan, satu pertemuan untuk pembahasan dengan pendekatan prosedural, dan pertemuan yang lain akan kita bahas dengan pendekatan OOP atau pendekatan objek.
Tanggal dan Waktu Pada PHP
Terdapat banyak cara dan pendekatan untuk memanipulasi tanggal dan waktu pada PHP. Yang paling inti adalah pendekatan prosedural dan pendekatan OOP.
Pendekatan prosedural umumnya menggunakan fungsi bawaan php yaitu fungsi date()
, sedangkan pendekatan objek biasanya menggunakan kelas bawaan PHP bernama keals DateTime
.
Pada tutorial ini kita akan membahas penggunakan pendekatan prosedural untuk memanipulasi tanggal dan waktu pada PHP, dan pada pertemuan selanjutnya insyaallah kita akan membahasnya dengan pendekatan pemrograman berbasis objek.
Pendekatan OOP vs Prosedural
Jika anda bingung apa itu Object Oriented Programming (OOP) dan apa bedanya dengan pendekatan prosedural, jangan khawatir. Insyaallah kita akan mempelajarinya dalam seri tutorial php berikut-berikutnya.
Intinya, pendekatan prosedural adalah penggunaan fungsi tanpa ada pembuatan suatu instan dari kelas tertentu.
Sedangkan penggunakan pendekatan objek atau OOP, anda perlu membuat instan dari suatu kelas tertentu dengan perintah new
.
Contoh prosedural:
<?php
echo date('d-m-Y'); // 17-02-2020
Contoh pendekatan objek:
<?php
$tanggalHariIni = new DateTime();
echo $tanggalHariIni->format('d-m-Y'); // 17-02-2020
Untuk lebih detilnya, anda anda bisa melihat pembahasan tentang memanipulasi tanggal dan waktu pada PHP dengan pendekatan objek.
Penggunaan fungsi date()
Secara sintaks, fungsi date()
menerima 2 paremeter. Satu parameter bersifat wajib, dan yang satu lagi bersifat opsional.
<?php
$hariIni = date(format[, timestamp]);
Penjelasan parameter:
- format: adalah format tanggal dan waktu yang akan kita tampilkan. Parameter ini bertipe data string.
- timestamp: timestamp bersifat opsional, jika tidak didefinisikan, PHP akan menggunakan waktu sekarang ketika fungsi
date
dipanggil.
Contoh menampilkan tahun sekarang:
<?php
echo date('Y') . '<br>';
echo date('y') . '<br>'; # 2 digit terakhir dari tahun sekarang
Output:
2020
20
Contoh menampilkan hari dan bulan:
<?php
echo date('d/m/Y') . '<br>';
echo date('d-m-Y') . '<br>';
echo date('d, m Y') . '<br>';
# anda juga bisa menggunakan escape string
echo date('d \wk\wk m \wk\wk Y') . '<br>';
Output:
17/02/2020
17-02-2020
17, 02 2020
17 wkwk 02 wkwk 2020
Fungsi date() dengan timestamp
Seperti yang sudah disebutkan di atas, fungsi date()
menerima 2 parameter dan parameter yang kedua adalah timestamp.
Apa itu timestamp?
Timestamp adalah jarak waktu dari tanggal 1 Januari 1970 pukul 00:00 ke tanggal sekarang dan waktu sekarang. Jarak tersebut didefinisikan dalam satuan detik.
Untuk mengetahui timestamp dari waktu sekarang, anda bisa menggunakan fungsi time()
.
<?php
echo time();
Output:
1581946962
Karena timestamp adalah jarak waktu dengan satuan detik, maka angka di atas akan terus berubah seiring dengan waktu ketika anda memanggil fungsi time()
.
Menampilkan timestamp dengan fungsi date()
Kita bisa menampilkan timestamp ke dalam bentuk string tanggal dan waktu dengan menjadikannya parameter ke-2 pada fungsi date()
.
Contoh, misalkan kita punya timestamp 1234567890
. Lalu kita ingin menampilkannya dalam format d-m-Y
, kita bisa melakukannya dengan kode program berikut:
<?php
$timestamp = 1234567890;
$stringDate = date('d-m-Y H:i', $timestamp);
echo "Timestamp: {$timestamp} <br>";
echo "String date: {$stringDate} <br>";
Output:
Timestamp: 1234567890
String date: 14-02-2009 06:31
Konversi String date()
ke Dalam Bentuk Timestamp
Kita telah mengetahui cara menampilkan timestamp ke dalam string tanggal dan waktu.
Sekarang pertanyaannya, kita memiliki string tanggal atau waktu, lalu kita ingin mendapatkan nilai timestamp-nya, bagaimana caranya?
Kita bisa menggunakan fungsi bawaan php yang bernama strtotime()
.
Fungsi ini menerima parameter string dalam berbagai bentuk. Perhatikan contoh berikut:
<?php
echo strtotime("now") . '<br>'; # timestime untuk waktu sekarang
echo strtotime("2020-12-31") . '<br>'; # timestamp untuk tanggal 31 Desember 2020
echo strtotime("2020-12-31 12:00") . '<br>'; # timestamp untuk tanggal 31 Desember 2020 pukul 12:00
Output:
1581948269
1609347600
1609390800
Ia juga bisa menerima deskripsi tanggal dan waktu dalam bahasa inggris, bahkan ia juga bisa menerima parameter dinamis terhadap waktu sekarang. Perhatikan contoh berikut:
<?php
echo strtotime("05th maret 2004") . '<br>'; # untuk tanggal 5 Maret 2004
echo strtotime("next sunday") . '<br>'; # hari minggu yang akan datang
echo strtotime("previous friday") . '<br>'; # hari jumat yang lalu
echo strtotime("+2 days") . '<br>'; # 2 hari lagi
Output:
1582390800
1581613200
1582121258
Format Tanggal dan Waktu
Kita telah mencoba beberapa kode format tanggal, kode format tanggal didefinisikan dengan satu karakter string. Berikut ini adalah kode format tanggal dan waktu yang sering digunakan pada PHP.
Kode format hari
Beberapa kode format hari yang sering digunakan di dalam bahasa pemrograman PHP.
Kode | Keterangan | Nilai Kembalian |
---|---|---|
d | Urutan hari dalam bulan, diikuti angka 0 untuk hari < 10 | 01-31 |
j | Urutan hari dalam bulan, tidak diikuti angka 0 | 1-31 |
D | Nama hari, hanya 3 karakter. Nama hari sesuai dengan pilihan lokalisasi | Mon - Sun |
l | Nama hari secara penuh. Nama disesuaikan dengan pilihan lokalisasi | Sunday - Saturday |
Kode format bulan
Beberapa kode format bulan yang sering digunakan di dalam bahasa pemrograman PHP.
Kode | Keterangan | Nilai Kembalian |
---|---|---|
m | Urutan bulan dalam tahun, diikuti angka 0 untuk hari < 10 | 01-12 |
n | Urutan bulan dalam tahun, tidak diikuti angka 0 | 1-12 |
M | Nama pendek dari suatu bulan, hanya 3 karakter. Nama disesuaikan dengan pilihan lokalisasi | Jan-Dec |
F | Nama lengkap dari suatu bulan. Nama disesuaikan dengan pilihan lokalisasi | January - December |
Kode format tahun
Beberapa kode format tahun yang sering digunakan di dalam bahasa pemrograman PHP.
Kode | Keterangan | Nilai Kembalian |
---|---|---|
Y | Menampilkan 4 digit tahun | Contoh: 1990 - 2030 |
y | Menampilkan hanya 2 digit terakhir dari tahun | Contoh: 90 - 30 |
Kode format waktu
Beberapa kode format waktu yang sering digunakan di dalam bahasa pemrograman PHP.
Kode | Keterangan | Nilai Kembalian |
---|---|---|
h | Jam dalam format 12-hour | 01-12 |
H | Jam dalam format 24-hour | 01-24 |
a | Lowercase Ante meridiem and Post meridiem | am-pm |
A | Uppercase Ante meridiem and Post meridiem | AM-PM |
i | Menit dengan diikuti angka 0 | 01-59 |
s | Detik dengan diikuti angka 0 | 01-59 |
Untuk daftar format tanggal dan waktu yang lebih lengkap, anda bisa merujuk secara langsung ke dokumentasi resmi php.
Pengaturan Zona Waktu atau Time Zone
Zona waktu PHP bisa berbeda dengan zona waktu pengaturan server kita. Misalkan server kita menggunakan zona waktu "America/Regina"
, PHP bisa berjalan dengan zona waktu yang lain semisal "Asia/Jakarta"
.
Dan zona waktu ini adalah zona waktu yang digunakan disemua fungsi yang berkaitan dengan tanggal dan waktu pada PHP pada kode program anda.
Untuk mengganti pengaturan zona waktu, anda bisa mengubahnya pada file php.ini
.
Atau anda juga bisa menggunakan fungsi date_default_timezone_set()
.
Fungsi tersebut menerima satu parameter yaitu nama zona waktu yang kita pilih. Perhatikan contoh berikut:
<?php
date_default_timezone_set("America/Regina") . '<br>';
echo date("d-m-Y H:i") . '<br>';
// ganti ke indonesia
date_default_timezone_set("Asia/Jakarta") . '<br>';
echo date("d-m-Y H:i");
Dalam kode program di atas, kita memanggil fungsi date()
dua kali untuk menampilkan tanggal dan waktu sekarang. Akan tetapi, kedua fungsi date()
di atas berjalan dengan zona waktu yang berbeda karena kita telah menggantinya dengan fungsi date_default_timezone_set()
.
Output dari kode program di atas adalah:
18-02-2020 03:50
18-02-2020 16:50
Daftar zona waktu yang didukung di PHP
Untuk melihat daftar zona waktu yang didukung pada PHP, anda bisa pergi ke dokumen resmi php.net pada halaman Zona Waktu.
Atau anda bisa mendapatkan list array
dari zona waktu tersebut dari fungsi static DateTimeZone::listIdentifiers()
seperti contoh berikut:
<?php
$daftarTimezone = DateTimeZone::listIdentifiers();
foreach ($daftarTimezone as $timezone) {
echo "{$timezone} <br>";
}
Output:
Memanipulasi Tanggal dan Waktu
Memanipulasi tanggal dan waktu adalah pekerjaan yang sangat penting dalam proses pembuatan aplikasi atau web. Misal kita punya toko online, lalu kita ingin mengirim peringatan tagihan yang harus dibayar setelah 3 hari dari proses pembelian, maka di sini kita butuh untuk memanipulasi tanggal dan waktu sehingga kita bisa tahu 3 hari setelah tanggal pembelian itu tanggal berapa dan jam berapa?
Untuk melakukan pekerjaan ini, cara yang paling pas adalah menggunakan pendekatan objek dengan kelas bawaan PHP bernama DateTime
, atau mungkin bisa dengan menggunakan pustaka pihak ketiga seperti Carbon.
Untuk lebih detilnya, insyaallah tentang manipulasi tanggal dan waktu ini akan kita bahas pada pertemuan selanjutnya.
Membandingkan Tanggal dan Waktu
Kita bisa membandingkan tanggal dan waktu dengan pendekatan prosedural menggunakan 2 cara:
- membandingkan string hasil kembalian dari fungsi
date()
. Cara ini tidak terlalu direkomendasikan. - mengubah tanggal menjadi timestamp lalu mulai membandingkan keduanya. Cara ini adalah cara yang direkomendasikan.
Perhatikan contoh berikut:
<?php
$tanggal1 = "2020-01-01";
$tanggal2 = "2020-01-31";
if ($tanggal1 < $tanggal2) {
echo "{$tanggal1} < {$tanggal2}";
} elseif ($tanggal1 === $tanggal2) {
echo "{$tanggal1} = {$tanggal2}";
} else {
echo "{$tanggal1} > {$tanggal2}";
}
Output:
2020-01-01 < 2020-01-31
Contoh perbandingan tanggal dengan menggunakan timestamp:
<?php
$tanggal1 = "2020-02-01";
$tanggal2 = "2020-01-31";
if (strtotime($tanggal1) < strtotime($tanggal2)) {
echo "{$tanggal1} < {$tanggal2}";
} elseif ($tanggal1 === $tanggal2) {
echo "{$tanggal1} = {$tanggal2}";
} else {
echo "{$tanggal1} > {$tanggal2}";
}
Output:
2020-02-01 > 2020-01-31
Pembahasan Selanjutnya
Pada tutorial ini kita telah mempelajari bagaimana cara kita bekerja dengan tanggal dan waktu pada PHP dengan pendekatan prosedural. Kita telah mencoba beberapa fungsi seperti fungsi date()
, time()
, strtotime()
dan juga fungsi date_default_timezone_set()
untuk mengatur zona waktu default.
Pada pertemuan selanjutnya, insyaallah kita akan melanjutkan pembahasan yang sama, hanya saja menggunakan pendekatan yang berbeda! Yaitu pendekatan objek.
2. Tanggal dan Waktu (Objek)
PHP: Bekerja Dengan Tanggal Dan Waktu (Pendekatan Objek)
Pertemuan sebelumnya kita telah membahas cara bekerja dengan tanggal dan waktu pada PHP dengan pendekatan prosedural. Pada pertemuan kali ini, kita masih akan berkutat dengan pembahasan tersebut, akan tetapi kita akan melakukannya dengan pendekatan objek. Yaitu dengan menggunakan fungsi-fungsi yang ada pada kelas bawaan PHP bernama DateTime
.
Inisialisasi Tanggal dan Waktu
<?php
$hariIni = new DateTime();
echo $hariIni->format('d-m-Y H:i') . '<br>';
Output:
10-02-2020 14:50
<?php
$hariIni = new DateTime("2020-02-10 14:53");
$awalFebruari = new DateTime("1st February 2020 01:00");
echo $hariIni->format('d-m-Y H:i') . '<br>';
echo $awalFebruari->format('d-m-Y H:i') . '<br>';
Output:
10-02-2020 14:53
01-02-2020 01:00
Format Tanggal dan Waktu
Sama seperti pendekatan prosedural dengan fungsi date()
, kita juga bisa melakukan pemformatan tanggal dan waktu pada kelas DateTime
dengan kode yang sama.
Perhatikan beberapa contoh berikut:
<?php
$hariIni = new DateTime();
echo $hariIni->format('l F Y, H:i') . '<br>';
echo $hariIni->format('D M y, H:i') . '<br>';
echo $hariIni->format('d-m-Y, h:iA') . '<br>';
Output:
Wednesday February 2020, 17:24
Wed Feb 20, 17:24
19-02-2020, 05:24PM
Timestamp
Timestamp adalah jarak waktu dari tanggal 1 Januari 1970 pukul 00:00 ke tanggal dan jam sekarang. Jarak tersebut didefinisikan dalam satuan detik.
Timestamp merupakan data dengan tipe integer
dan ia adalah satuan data yang diakui di berbagai macam sistem dan bahasa pemrograman.
Pada tutorial sebelumnya kita telah belajar bagaimana cara mengetahui timestamp waktu sekarang dan bagaimana cara mengkonversinya ke bentuk tanggal dan waktu yang bisa dibaca manusia.
Dan sekarang, kita akan melakukan hal yang sama akan tetapi menggunakan kelas DateTime
.
Konversi DateTime ke timestamp
Kita bisa mengkonversi instan dari kelas DateTime
ke dalam timestamp dengan memanggil fungsi getTimestamp()
.
Perhatikan contoh berikut:
<?php
$hariIni = new DateTime("2020-12-31");
echo "Tanggal: " . $hariIni->format('d-m-Y') . '<br>';
echo "Timestamp: " . $hariIni->getTimestamp() . " <br>";
Output:
Tanggal: 31-12-2020
Timestamp: 1609347600
Konversi timestamp ke DateTime
Jika kita memiliki data berupa timestamp
lalu ingin mengubahnya ke dalam instan DateTime
, kita bisa melakukannya dengan membuat instan DateTime
terlebih dahulu, lalu memanggil fungsi setTimestamp()
untuk mengkonversinya.
Perhatikan contoh berikut:
<?php
$timestamp = 1234567890;
$hariIni = new DateTime();
$hariIni->setTimestamp($timestamp);
echo "Timestamp: {$timestamp} <br>";
echo "Tanggal: " . $hariIni->format('d-m-Y') . '<br>';
Output:
Timestamp: 1234567890
Tanggal: 14-02-2009
Mengganti Lokalisasi
Jika kita ingin agar nama hari dan nama bulan ditampilkan dengan Bahasa Indonesia, kita bisa melakukannya dengan mengubah lokalisasi PHP menjadi Bahasa Indonesia. Sehingga teks yang awalnya seperti ini:
Wednesday February 2020, 17:24
Wed Feb 20, 17:24
Berubah menjadi:
Rabu 19 Februari 2020, 20:11
Rab 19 Feb 2020, 20:11
Bagaimana caranya? Insyaallah akan kita bahas pada pertemuan selanjutnya.
Pengaturan Time Zone
Secara umum untuk pengaturan time zone atau zona waktu, kita bisa mengaturnya dengan dua cara:
- lewat pengaturan file php.ini
- atau dengan memanggil fungsi
date_default_timezone_set()
.
Pada pembahasan tanggal dan waktu bagian 1 kita telah membahas tentang pengaturan zona waktu dengan fungsi date_default_timezone_set()
.
Fungsi tersebut juga bisa bekerja meskipun kita menggunakan DateTime
.
Akan tetapi, untuk penggunaan DateTime
, kita bisa menggunakan cara lain untuk mengatur zona waktu: yaitu dengan mendefinisikannya pada parameter ke-2 ketika instantiasi kelas DateTime
.
Perhatikan contoh berikut:
<?php
$tanggal1 = new DateTime('now', new DateTimeZone('Asia/Jakarta'));
$tanggal2 = new DateTime('now', new DateTimeZone('America/Regina'));
echo "Tanggal 1: " . $tanggal1->format("d-m-Y H:i") . "<br>";
echo "Tanggal 2: " . $tanggal2->format("d-m-Y H:i") . "<br>";
Output:
Tanggal 1: 19-02-2020 20:19
Tanggal 2: 19-02-2020 07:19
Memanipulasi Tanggal dan Waktu
Memanipulasi tanggal dan waktu adalah pekerjaan yang sangat penting dalam proses pembuatan aplikasi atau web. Misal kita punya toko online, lalu kita ingin mengirim peringatan tagihan yang harus dibayar setelah 3 hari dari proses pembelian, maka di sini kita butuh untuk memanipulasi tanggal dan waktu sehingga kita bisa tahu 3 hari setelah tanggal pembelian itu tanggal berapa dan jam berapa?
Dengan menggunakan fungsi-fungsi yang dimiliki kelas DateTime
, kita bisa melakukannya dengan mudah.
Perhatikan contoh-contoh berikut ini:
Menambah hari, minggu, bulan, dan tahun
Untuk menambahkan hari, minggu, bulan atau tahun, kita bisa memanfaatkan fungsi modify()
.
Fungsi tersebut akan merubah instan dari kelas DateTime
yang menjadi induk pemanggilan fungsi tersebut.
Karena kita tidak ingin mengubah tanggal induk yang asli, maka kita akan mengkloningnya dengan perintah clone
.
Perhatikan kode program berikut ini:
<?php
$hariIni = new DateTime("01-01-2020");
$tigaHariLagi = (clone $hariIni)->modify("+3 days");
$semingguLagi = (clone $hariIni)->modify("+1 week");
$tujuhMingguLagi = (clone $hariIni)->modify("+7 weeks");
$duaBulanLagi = (clone $hariIni)->modify("+2 months");
$limaBelasTahunLagi = (clone $hariIni)->modify("+15 years");
echo $hariIni->format("d-m-Y") . "<br>";
echo $tigaHariLagi->format("d-m-Y") . "<br>";
echo $semingguLagi->format("d-m-Y") . "<br>";
echo $tujuhMingguLagi->format("d-m-Y") . "<br>";
echo $duaBulanLagi->format("d-m-Y") . "<br>";
echo $limaBelasTahunLagi->format("d-m-Y") . "<br>";
Output:
01-01-2020
04-01-2020
08-01-2020
19-02-2020
01-03-2020
01-01-2035
Mengurangi hari, minggu, bulan, dan tahun
Caranya adalah sama dengan sebelumnya. Hanya saja jika ingin mengurangi, kita harus menggunakan tanda -
. Perhatikan contoh berikut:
<?php
$hariIni = new DateTime("01-01-2020");
$tigaHariYangLalu = (clone $hariIni)->modify("-3 days");
$semingguYangLalu = (clone $hariIni)->modify("-1 week");
echo $hariIni->format("d-m-Y") . "<br>";
echo $tigaHariYangLalu->format("d-m-Y") . "<br>";
echo $semingguYangLalu->format("d-m-Y") . "<br>";
Output:
01-01-2020
29-12-2019
25-12-2019
Membandingkan Tanggal dan Waktu
Sama dengan yang kita lakukan pada tutorial sebelumnya, dengan menggunakan DateTime
kita bisa membandingkannya dengan operator perbandingan. Entah itu kurang dari (<
), atau lebih dari (>
), sama dengan (=
), atau yang lainnya.
Perhatikan contoh berikut:
<?php
$tanggal1 = new DateTime("2020-01-01");
$tanggal2 = new DateTime("2020-01-31");
if ($tanggal1 < $tanggal2) {
echo $tanggal1->format("d-m-Y") . " < " . $tanggal2->format("d-m-Y");
} elseif ($tanggal1 === $tanggal2) {
echo $tanggal1->format("d-m-Y") . " = " . $tanggal2->format("d-m-Y");
} else {
echo $tanggal1->format("d-m-Y") . " > " . $tanggal2->format("d-m-Y");
}
Output:
01-01-2020 < 31-01-2020
Pembahasan Selanjutnya
Pada dua pertemuan ini, kita telah selesai membahas tentang bagaimana cara memanipulasi tanggal dan waktu pada PHP, baik dengan pendekatan prosedural mau pun dengan pendekatan OOP.
Pada pertemuan selanjutnya insyaallah kita masih akan membahas tentang tanggal dan waktu, yaitu tentang bagaimana cara menampilkan nama hari dan nama bulan dalam PHP dengan Bahasa Indonesia.
3. Hari dan Bulan (Indonesia)
PHP: Menampilkan Hari dan Bulan Dalam Bahasa Indonesia
Pendahuluan
Pada dua pertemuan sebelumnya, kita telah mempelajari bagaimana cara menampilkan nama hari dan nama bulan dengan PHP. Baik menggunakan pendekatan prosedural dengan fungsi date()
, atau dengan pendekatan objek menggunakan kelas bawaan PHP bernama DateTime
.
Perhatikan contoh berikut:
<?php
# pendekatan prosedural
echo date('D M y, H:i') . '<br>';
# pendekatan objek
$hariIni = new DateTime();
echo $hariIni->format('l F Y, H:i') . '<br>';
Kedua kode program di atas, ketika saya eksekusi, menghasilkan output sebagai berikut:
Thu Feb 20, 17:27
Thursday February 2020, 17:27
Nah permasalahannya adalah, nama hari dan bulannya ditulis dalam Bahasa Inggris. Sedangkan kita inginnya agar nama hari dan nama bulan tersebut ditulis dalam Bahasa Indonesia, seperti ini:
Kamis 20 Februari 2020, 17:27
Kam 20 Feb 2020, 17:27
Bagaimana caranya?
Dalam tutorial ini, insyaallah kita akan membahas beberapa cara yang bisa kita lakukan untuk menampilkan nama hari dan nama bulan dalam Bahasa Indonesia.
Solusi 1: Mengganti Lokalisasi PHP (Direkomendasikan)
Cara yang pertama adalah dengan mengganti lokalisasi PHP kita menjadi berbahasa Indonesia. Menurut Wikipedia Bahasa Indonesia, kata locale dalam Bahasa Inggris bisa diterjemahkan dengan kata “lokalisasi” atau bisa juga diterjemahkan dengan “pelokalan” [1].
Ia adalah suatu istilah komputer untuk penyesuaian terjemahan bahasa suatu perangkat lunak ke bahasa lokal agar bisa lebih mudah digunakan oleh penduduk. Tidak hanya terjemahan saja, tapi lokalisasi komputer juga berkaitan dengan hal yang lain seperti: format mata uang, format penulisan angka, dan format tanggal dan waktu pada suatu daerah tertentu.
Nah, dengan mengganti lokalisasi PHP menjadi Bahasa Indonesia, kita tidak perlu melakukan perubahaan yang berarti pada kode program kita. Kode program kita tetap seperti sediaka kala tanpa melakukan tambahan yang panjang lagi rumit.
Bagaimana caranya?
Pastikan sistem operasi kita mendukung lokalisasi Bahasa Indonesia
Umumnya, semua sistem operasi mendukung lokalisasi dari berbagai bahasa dunia. Termasuk Indonesia.
Akan tetapi, perlu dipastikan bahwa lokalisasi tersebut sudah terpasang pada sistem yang kita gunakan: baik Windows, mau pun unix-based seperti Linux atau Mac OS.
Lokalisasi tersebut tidak perlu aktif sebagai lokalisasi utama, kita tetap bisa menggunakan Bahasa Inggris pada sistem kita dan di saat yang sama Bahasa Indonesia juga dalam keadaan terpasang.
Periksa Lokalisasi Aktif Pada Linux
Jika kita menggunakan linux, kita bisa memeriksa lokalisasi yang aktif pada sistem kita menggunakan perintah berikut:
locale -a
Pada Ubuntu yang saya gunakan, output yang saya dapatkan adalah seperti ilustrasi berikut:
C
C.UTF-8
en_AG.utf8
...
en_US.utf8
...
id_ID.utf8
POSIX
Di dalam daftar locales yang terpasang di sistem yang saya gunakan adalah: id_ID.utf8
yang menunjukkan bahwa ia adalah Bahasa Indonesia.
Menambahkan Lokalisasi Bahasa Indonesia di Linux
Jika di sistem atau server yang anda gunakan ternyata belum terpasang lokalisasi Bahasa Indonesia, anda perlu memasangnya terlebih dahulu.
Memasang Lokalisasi di Ubuntu
Untuk pengguna Ubuntu, anda bisa melakukan perintah berikut:
sudo locale-gen id_ID
sudo locale-gen id_ID.UTF-8
Lalu update lokalisasi dengan perintah:
sudo update-locale
Mengganti Lokalisasi PHP
Untuk mengganti lokalisasi pada PHP, kita bisa menggunakan perintah setlocale
. Perhatikan kode program berikut:
<?php
setlocale(LC_ALL, 'id_ID');
// atau
setlocale(LC_ALL, 'id_ID.utf8'); // tergantung dengan lokalisasi yang terpasang pada sistem
NB: untuk pengguna windows, anda bisa menggunakan kode id_ID
untuk Bahasa Indonesia sesuai dengan Language Identifier Constants and Strings dan juga kaidah penamaan kode bahasa pada halaman Language and Country/Region Strings.
Menampilkan Nama Hari dan Bulan Dalam Bahasa Indonesia
Langkah selanjutnya adalah menampilkan nama hari dan bulan dengan Bahasa Indonesia.
Kita punya satu masalah, bahwasanya fungsi date()
mau pun fungsi DateTime::format()
tidak mendukung pelokalan sistem. Ia hanya bisa menampilkan format tanggal dalam Bahasa Indonesia saja.
Sebagai alternatifnya, kita bisa menggunakan fungsi strftime()
untuk menampilkan format tanggal sesuai dengan lokalisasi yang telah diatur. Fungsi strftime()
menerima dua parameter:
- Format: yaitu kode tertentu yang merepresentasikan bagaimana tanggal dan waktu akan ditampilkan. Ia memiliki kode yang berbeda dengan fungsi
date()
mau punDateTime::format()
. - Timestamp: yaitu jarak antara suatu waktu dari tanggal 1 Januari 1970 dalam satuan detik.
Perhatikan contoh lengkap berikut:
<?php
setlocale(LC_TIME, 'id_ID.utf8');
$hariIni = new DateTime();
# lokalisasi tidak berpengaruh
echo $hariIni->format('l F Y, H:i') . '<br>';
echo $hariIni->format('D M y, H:i') . '<br>';
echo "<br>";
# lokalisasi berpengaruh
echo strftime('%A %d %B %Y, %H:%M', $hariIni->getTimestamp()) . '<br>';
echo strftime('%a %d %b %Y, %H:%M', $hariIni->getTimestamp()) . '<br>';
Kode program di atas akan menampilkan hasil kira-kira seperti berikut ini (tergantung kapan kode program tersebut dieksekusi):
Thu Feb 20, 17:27
Thursday February 2020, 17:27
Kamis 20 Februari 2020, 17:27
Kam 20 Feb 2020, 17:27
Format Tanggal dan Waktu untuk fungsi strftime()
Fungsi strftime()
mengikuti format tanggal dan waktu yang berbeda dari fungsi date()
mau pun fungsi DateTime::format()
.
Ini memang agak sedikit membingungkan. Akan tetapi cara kerjanya sama persis. Pun, kita tidak perlu menghafal setiap formatnya, kok.
Berikut ini beberapa format umum yang mungkin anda butuhkan.
Kode format hari
Beberapa kode format hari yang sering digunakan di dalam bahasa pemrograman PHP.
Kode | Keterangan | Nilai Kembalian |
---|---|---|
d | Urutan hari dalam bulan, diikuti angka 0 untuk hari < 10 | 01-31 |
e | Urutan hari dalam bulan, tidak diikuti angka 0 | 1-31 |
a | Nama hari, hanya 3 karakter. Nama hari sesuai dengan pilihan lokalisasi | Mon - Sun |
A | Nama hari secara penuh. Nama disesuaikan dengan pilihan lokalisasi | Sunday - Saturday |
Kode format bulan
Beberapa kode format bulan yang sering digunakan di dalam bahasa pemrograman PHP.
Kode | Keterangan | Nilai Kembalian |
---|---|---|
m | Urutan bulan dalam tahun, diikuti angka 0 untuk hari < 10 | 01-12 |
b | Nama pendek dari suatu bulan, hanya 3 karakter. Nama disesuaikan dengan pilihan lokalisasi | Jan-Dec |
B | Nama lengkap dari suatu bulan. Nama disesuaikan dengan pilihan lokalisasi | January - December |
Kode format tahun
Beberapa kode format tahun yang sering digunakan di dalam bahasa pemrograman PHP.
Kode | Keterangan | Nilai Kembalian |
---|---|---|
Y | Menampilkan 4 digit tahun | Contoh: 1990 - 2030 |
y | Menampilkan hanya 2 digit terakhir dari tahun | Contoh: 90 - 30 |
Kode format waktu
Beberapa kode format waktu yang sering digunakan di dalam bahasa pemrograman PHP.
Kode | Keterangan | Nilai Kembalian |
---|---|---|
I | Jam dalam format 12-hour | 01-12 |
H | Jam dalam format 24-hour | 01-24 |
P | Lowercase Ante meridiem and Post meridiem | am-pm |
p | Uppercase Ante meridiem and Post meridiem | AM-PM |
M | Menit dengan diikuti angka 0 | 01-59 |
S | Detik dengan diikuti angka 0 | 01-59 |
Solusi 2: Terjemah Manual Dengan Percabangan Switch-Case
Cara yang kedua adalah dengan membuat fungsi percabangan switch case
dan melakukan penerjemahan secara manual.
Dan ini adalah cara yang saya kurang sukai karena ia menambah pekerjaan. Karena kita membuat sesuatu yang sama dengan apa yang sebenarnya sudah ada secara default. Bahkan yang default jauh lebih bagus dari pada buatan kita.
Tapi untuk belajar dan mengasah logika, cara yang kedua ini tidak ada salahnya sama sekali bahkan bisa membantu proses belajar kita untuk menjadi programmer PHP yang handal.
Silakan perhatikan contoh berikut:
<?php
function hariIndo ($hariInggris) {
switch ($hariInggris) {
case 'Sunday':
return 'Minggu';
case 'Monday':
return 'Senin';
case 'Tuesday':
return 'Selasa';
case 'Wednesday':
return 'Rabu';
case 'Thursday':
return 'Kamis';
case 'Friday':
return 'Jumat';
case 'Saturday':
return 'Sabtu';
default:
return 'hari tidak valid';
}
}
Lalu kita bisa panggil fungsi di atas sebagai berikut:
<?php
$hariBahasaInggris = date('l');
$hariBahasaIndonesia = hariIndo($hariBahasaInggris);
echo "Bahasa Inggris: {$hariBahasaInggris} <br>";
echo "Bahasa Indonesia: {$hariBahasaIndonesia} <br>";
Output dari kode program di atas adalah:
Bahasa Inggris: Thursday
Bahasa Indonesia: Kamis
Solusi 3: Menggunakan Pustaka Pihak Ketiga
Solusi yang ketiga adalah menggunakan pustaka pihak ketiga yang bernama Carbon. Ia adalah pustaka PHP yang menyederhakan pekerjaan programmer ketika harus berhadapan dengan tanggal dan waktu.
Cara ini sebenarnya adalah cara yang paling saya rekomendasikan untuk digunakan pada projek betulan. Akan tetapi pada seri tutorial php tingkat menengah ini, saya kira cara yang pertama masih cara yang paling sesuai untuk dilakukan.
Sebagai gambaran, dengan menggunakan Carbon, anda cukup menuliskan kode program seperti berikut ini:
<?php
# tanggal sekarang dalam bahasa indo
$hariIni = \Carbon\Carbon::now()->locale('id');
# tampilkan nama bulan
echo $hariIni->monthName; # Februari
Kesimpulan
Dalam pertemuan ini, kita telah membahas 3 cara untuk menampilkan nama hari dan nama bulan di PHP dalam Bahasa Indonesia.
Cara yang pertama adalah dengan melakukan pengaturan lokalisasi, dan ini adalah cara yang direkomendasikan. Cara yang kedua adalah dengan melakukan penterjemahan manual memanfaatkan logika percabangan switch case
. Dan cara yang ketiga adalah dengan menggunakan pustaka pihak ketiga yaitu Carbon.
Pembahasan Selanjutnya
Insyaallah pada pembahasan selanjutnya pada seri tutorial PHP tingkat menengah ini kita akan membahas tentang ruang lingkup variabel dan apa itu variabel global.
Jangan lupa share tutorial PHP ini ke kawan-kawan kalian, ya!
Terima kasih banyak!
Referensi
[1] https://id.wikipedia.org/wiki/Internasionalisasi_dan_pelokalan
4. Include dan Require
PHP: Pembahasan Tentang Include Dan Require
Kita masih berada pada seri tutorial belajar PHP tingkat menengah, ini adalah pertemuan ke-4. Pada pertemuan-pertemuan sebelumnya kita telah membahas hal-hal yang berkaitan dengan tanggal dan waktu, baik dengan pendekatan prosedural mau pun pendekatan objek. Kita juga telah membahas tentang cara menampilkan tanggal dan waktu dalam bahasa Indonesia.
Pada pertemuan kali ini, kita akan membahas sesuatu yang berbeda dan tidak kalah penting dengan pembahasan sebelumnya. Yaitu pembahasan tentang perintah include
dan require
.
Apa Itu Include dan Require?
include
dan require
adalah dua fungsi atau dua perintah dalam PHP yang bertugas untuk memuat suatu file PHP, di dalam file PHP yang lain.
Secara umum kedua perintah tersebut memiliki tugas yang sama. Hanya saja, dari segi error, keduanya memiliki perbedaan:
- Jika file yang di-load ternyata tidak ada, perintah
include
akan tetap mengeksekusi baris kode program selanjutnya. - Sedangkan jika file yang di-load dengan fungsi
require
ternyata tidak ada, maka ia akan berhenti di mana fungsirequire
tersebut dipanggil, dan tidak melanjutkan pengeksekusian kode program berikutnya.
Kenapa Perlu Fungsi Include dan Require?
Alasannya adalah: ketika program yang kita bangun semakin besar, maka ada semakin banyak fungsi atau konten halaman yang butuh kita panggil atau tampilkan berkali-kali di berbagai tempat. Dari pada mendefinisikan fungsi atau halaman tersebut secara berulang, kita lebih baik hanya mendefinisikannya sekali saja, untuk kemudian memanggilnya dari berbagai tempat dari file yang berbeda-beda.
Misalkan kita memiliki sebuah projek web profil, kita memiliki 3 halaman utama yaitu index.php
, about.php
, dan contact.php
.
Ketiga halaman tersebut semuanya memiliki header, footer, dan navbar yang sama. Sehingga dari pada kita membuat 3 header untuk masing-masing halaman, begitu juga 3 buah footer, dan 3 buah navbar. Lebih baik kita hanya membuat satu komponen saja, yang komponen tersebut akan dimuat di halaman-halaman yang membutuhkannya.
Di situlah kita membutuhkan fungsi include
dan require
.
Persiapan File
Agar lebih jelas lagi, mari kita buat file seperti berikut ini:
├── partials
| ├── footer.php
| ├── header.php
| └── navbar.php
├── about.php
├── contact.php
└── index.php
Lalu ubah 3 file di dalam direktori partials
masing-masing menjadi seperti di bawah:
File
partials/footer.php
<?php $tahunSekarang = date("Y"); echo "Copyright © {$tahunSekarang} jagongoding.com";
File
partials/header.php
<?php echo "<h1>Selamat datang di Jago Ngoding</h1>";
File
partials/navbar.php
<nav> <a href="index.php">Home</a> <a href="about.php">About</a> <a href="contact.php">Contact</a> </nav>
Kita katakan bahwa 3 buah halaman utama di atas yaitu about.php
, contact.php
, dan index.php
, masing-masing memuat file yang ada dalam direktori partials
mulai dari footer, header, hingga navbar.
Sehingga ketika misalkan kita ingin mengubah footer di 3 halaman tersebut, kita cukup mengubah satu file saja yaitu partials/footer.php
. Dan boom! Konten footer di 3 halaman utama langsung ikut berubah semuanya.
Nah, bagaimana cara melakukannya?
Contoh Penggunaan include
dan require
Ada dua macam cara penggunaan include
dan require
. Cara yang pertama adalah memanggilnya seperti kita memanggil fungsi: yaitu dengan tanda kurung. Sedangkan cara yang kedua adalah memanggilnya sebagai statement seperti saat kita memanggil echo
.
Cara pertama (contoh file index.php
):
<?php
# file index.php
require('partials/navbar.php');
include('partials/header.php');
echo "<div>Ini adalah halaman utama</div>";
require('partials/footer.php');
Cara kedua (contoh file about.php
):
<?php
# file about.php
require 'partials/navbar.php';
include 'partials/header.php';
echo "<div>Ini adalah halaman about</div>";
require 'partials/footer.php';
Sepertinya cara kedua nampak lebih cantik buat saya. Setuju atau tidak?
Anda bisa ubah sendiri konten untuk file contact.php
agar sama seperti index.php
dan about.php
. Lalu coba jalankan aplikasi pada browser, dan lihat bagaimana hasilnya.
Contoh Penggunaan include_once
dan require_once
Fungsi alternatif dari include
dan require
adalah: include_once
dan require_once
.
Dua fungsi tersebut hanya akan me-load file satu kali saja. Artinya jika file tersebut sudah di-load sebelumnya, dia tidak akan di-load lagi di file yang sama.
Perhatikan dua contoh kode program berikut ini:
<?php
include 'partials/header.php';
include 'partials/header.php';
Kode program di atas akan memuat file partials/header.php
sebanyak dua kali. Artinya: file header akan ditampilkan dua kali juga. Berbeda dengan jika kita memanggilnya dengan include_once
atau require_once
, sebanyak apa pun kita memanggil file yang sama, ia akan tetap dimuat satu kali saja.
<?php
include_once 'partials/header.php';
include_once 'partials/header.php';
Memuat File Dari Parent Direktori Yang Berbeda
Dalam contoh kasus di atas, kita bisa me-load file dengan mudah karena ia masih berada di satu direktori parent yang sama. Bagaimana kalau kita ingin memuat file dari direktori parent yang lainnya?
Oke, bayangkan kita memiliki struktur seperti berikut:
├── partials
| ├── footer.php
| ├── header.php
| └── navbar.php
├── articles
| ├── article-1.php
| ├── article-2.php
├── about.php
├── contact.php
└── index.php
Bayangkan kita sekarang berada pada file articles/article-2.php
. Lalu kita ingin memuat file navbar dan footer yang berada pada direktori partials
. Bagaimana caranya?
Caranya adalah: kita harus keluar dulu dari direktori file yang kita edit menggunakan alamat ..
, lalu setelah itu kita definisikan lokasi nama file yang ingin kita muat.
Perhatikan contoh file articles-2.php
berikut:
<?php
require_once '../partials/navbar.php';
// konten article-2
require_once '../partials/footer.php';
Memanggil Fungsi Dari File Lain
Secara umum, jika kita meng-include atau me-require suatu file dan di dalamnya terapat suatu fungsi, kita langsung bisa memanggilnya. Misalkan kita memiliki file seperti berikut:
├── bantuan
| ├── fungsi-luas-bangun-ruang.php
| ├── fungsi-volume-bangun-ruang.php
└── index.php
File bantuan/fungsi-luas-bangun-ruang.php
:
<?php
function hitungLuasPermukaanBalok (float $p, float $l, float $t) {
return ($p * $l * 2) + ($p * $t * 2) + ($l * $t * 2);
}
File bantuan/fungsi-volume-bangun-ruang.php
:
<?php
function hitungVolumeBalok (float $p, float $l, float $t) {
return $p * $l * t;
}
Nah, pada file index.php
, kita akan memanggil 2 fungsi hitungLuasPermukaanBalok()
dan hitungVolumeBalok()
yang berada pada file yang berbeda.
Caranya mudah saja, kita tinggal meng-include atau me-require-nya, setelah itu kita langsung bisa memanggil 2 fungsi tersebut.
Perhatikan kode program file index.php
berikut:
<?php
require_once 'bantuan/fungsi-luas-bangun-ruang.php';
require_once 'bantuan/fungsi-volume-bangun-ruang.php';
$panjang = 10;
$lebar = 5;
$tinggi = 3;
echo "Luas permukaan: " . hitungLuasPermukaanBalok($panjang, $lebar, $tinggi) . "<br>";
echo "Volume: " . hitungVolumeBalok($panjang, $lebar, $tinggi) . "<br>";
Memanggil Variabel Dari File Lain
Sama saja seperti fungsi, kita juga bisa memanggil variabel dari file yang kita include atau kita require. Hanya saja, untuk variabel, ada ruang lingkupnya. Ada variabel yang bersifat lokal, dan ada variabel yang bersifat global.
Insyaallah kita akan mengambil pembahasan tentang ruang lingkup variabel pada pertemuan selanjutnya.
Mana Yang Harus Digunakan Include atau Require?
Seperti yang sudah kita singgung sebelumnya, bahwa include
dan require
sebenarnya sama saja. Yang membedakan keduanya adalah error yang dihasilkan jika file yang dimuat ternyata tidak ada.
include
akan memproduksi error warning, yang mana kode program selanjutnya masih akan tetap dieksekusi.
Sedangkan require
akan memproduksi fatal error yang akan memberhentikan alur kerja program yang artinya kode program selanjutnya tidak akan pernah dieksekusi.
Pertanyaan, kapan harus menggunakan include
dan kapan harus menggunakan require
?
Untuk lebih amannya, lebih baik kita hanya menggunakan require
saja. Apalagi kalau projek yang kita kerjakan sudah semakin besar. Hal ini akan memudahkan kita mendeteksi error jika terjadi error, dan mengurangi celah keamanan dari projek yang kita bangun.
Pembahasan Selanjutnya
Setelah mempelajari bagaimana cara memuat suatu file PHP di dalam file PHP yang lain, insyaallah di pertemuan yang akan datang kita akan membahas tentang variabel. Yaitu tentang ruang lingkupnya, apa itu variabel lokal dan apa itu variabel global, serta variabel-variabel bawaan PHP.
5. Ruang Lingkup Variabel
PHP: Ruang Lingkup Variabel (Global, Lokal dan Statis)
Pada tutorial PHP dasar yang lalu, kita telah mempelajari dasar-dasar tipe data dan variabel, mulai dari peraturan penamaan variabel, cara pembuatan dan penggunannya.
Akan tetapi, kita masih baru di dasar-dasarnya saja, pada tutorial PHP tingkat menengah ini, kita akan memperdalam pelajaran kita: yaitu tentang ruang lingkup variabel di PHP dan jenis-jenis variabel ditinjau dari ruang lingkupnya.
Apa itu Ruang Lingkup Variabel?
Ruang lingkup variabel adalah jangkauan akses variabel tersebut.
Ada variabel yang bersifat global: ia bisa diakses dari bagian program mana pun dari berbagai file.
Ada variabel yang bersifat lokal: ia hanya bisa diakses oleh sebagian kode program tertentu dan tidak bisa diakses dari bagian yang lain.
Ada variabel yang bersifat statis: ia variabel yang bersifat tunggal, di mana pun ia berada, berapa kali pun ia dideklarasi, ia tetap dianggap satu.
Kita akan bahas masing-masing jenis variabel dalam tutorial ini.
Variabel Global
Seperti yang sudah disinggung sebelumnya: bahwa variabel global adalah variabel yang selalu bisa diakses kapan pun dan di mana pun. Bahkan dari file yang berbeda sekalipun.
Secara default, ketika kita mendeklarasikan variabel, variabel tersebut memiliki scope atau ruang lingkup global. Bisa diakses dari mana saja dari semua bagian kode program.
Sebagai contoh, katakanlah kita memiliki file seperti ini:
src
├── file-01.php
├── file-02.php
└── file-utama.php
File file-01.php
memiliki sebuah variabel, yaitu variabel $nama
yang secara otomatis ia memiliki ruang lingkup global. Perhatikan contoh berikut:
<?php
$nama = 'Nurul Huda'; // <-- variabel global
echo "file-01.php <br>";
echo "Nama: {$nama} <br><br>";
Sedangkan file-02.php
, ia tidak mendeklarasikan variabel $nama
sebelumnya. Akan tetapi ia meng-echo
variabel $nama
. Perhatikan kode program berikut:
<?php
echo "file-02.php <br>";
echo "Nama: {$nama} <br><br>";
// bahkan kita juga bisa mengubah isi dari variabel
// yang dideklarasikan di file yang lain
$nama .= ' bin Zakariyya';
Apakah bisa file-02.php
menampilkan variabel $nama
? Silakan anda jalankan, dan anda akan mendapati bahwa variabel $nama
kosong karena di dalam file tersebut variabel $nama
tidak pernah didefinisikan sebelumnya.
Bahkan, anda justru akan mendapatkan error PHP Notice: Undefined variable: nama in file-02.php.
Akan tetapi, ketika anda menggabungkan file-01.php
dan juga file-02.php
dengan perintah require, error yang sebelumnya ada pada file-02.php
tidak akan anda jumpai lagi karena sekarang semua variabel yang kita definisikan pada file-01.php
bersifat global dan bisa diakses dari file lain yang memuatnya dengan include()
mau pun require()
.
Perhatikan file-utama.php
berikut:
<?php
require 'file-01.php';
require 'file-02.php';
echo "file-utama.php <br>";
echo "Nama: {$nama} <br><br>";
Ketika kita jalankan file-utama.php
, output yang kita dapatkan adalah:
file-01.php
Nama: Nurul Huda
file-02.php
Nama: Nurul Huda
file-utama.php
Nama: Nurul Huda bin Zakariyya
Masih ada beberapa pembahasan lagi mengenai variabel global, pembahasannya akan kita akhirkan setelah pembahasan tentang variabel lokal.
Variabel Lokal
Beda dengan variabel global, variabel lokal tidak bisa diakses dari mana pun. Ia hanya bisa diakses dari scope di mana ia didefinisikan.
Dalam PHP, setiap variabel yang dideklarasikan di dalam sebuah fungsi, maka ia secara otomatis didefinisikan secara lokal. Dalam artian ia tidak bisa diakses di luar fungsi.
Perhatikan contoh berikut:
<?php
function haloDunia () {
$nama = "Nurul Huda";
}
haloDunia(); /* panggil fungsi haloDunia() */
echo $nama; /* error karena variabel $nama dalam fungsi haloDunia() bersifat lokal */
Atau, contoh sebaliknya:
<?php
$nama = "Nurul Huda"; /* variabel ini secara default bersifat global */
function haloDunia () {
echo $nama; /* sedangkan ini tereferensikan ke variabel lokal */
}
haloDunia();
Sehingga ketika program di atas kita eksekusi, hasilnya adalah kosong atau bahkan error. Karena variabel $nama
yang berusaha kita echo
di dalam fungsi haloDunia()
merujuk pada variabel lokal, alias variabel $nama
yang ada di dalam fungsi tersebut. Sedangkan di dalam fungsi tersebut tidak ada variabel $nama
sehingga hal tersebut membuat error Undefined variabel nama.
Bahkan, jika variabel global dan variabel lokal memiliki nama yang sama, ia tetap tidak tercampur satu sama lain. Perhatikan contoh berikut:
<?php
$nama = "Nurul Huda"; /* variabel global */
function haloDunia () {
$nama = "Wahid Abdullah"; # variabel lokal
echo $nama . '<br>'; # Wahid Abdullah
}
haloDunia();
echo $nama; # Nurul Huda
Output kode program di atas adalah:
Wahid Abdullah
Nurul Huda
Statement global
Lalu bagaimana jika kita ingin mereferensikan variabel global dalam sebuah fungsi? Sedangkan fungsi dalam PHP secara asal akan membuat scope-nya sendiri yang terpisah dengan variabel global?
Caranya adalah menggunakan statement global
.
Perhatikan contoh berikut:
<?php
$a = 5;
$b = 3;
function luas () {
global $a, $b;
$b = $a + $b;
}
luas();
echo "a = {$a} <br>";
echo "b = {$b} <br>";
Ketika program di atas dieksekusi, ia akan menghasilkan output sebagai berikut:
a = 5
b = 8
Variable $_GLOBALS
Selain menggunakan statement global
. Kita juga bisa menggunakan variabel bawaan PHP bernama $_GLOBALS
. Ia adalah variabel bertipe data array asosiatif dengan variabel global sebagai key-nya dan nilai dari variabel global sebagai value-nya.
Mari kita ubah kode program di atas menjadi seperti ini:
<?php
$a = 5;
$b = 3;
function luas () {
$_GLOBALS['b'] = $_GLOBALS['a'] + $_GLOBALS['b'];
}
luas();
echo "a = {$a} <br>";
echo "b = {$b} <br>";
Ketika program di atas dieksekusi, ia akan menghasilkan output sebagai berikut:
a = 5
b = 8
Variabel Statis
Di antara hal yang penting berkaitan dengan variable scope atau ruang lingkup variabel pada PHP adalah: variabel statis.
Variabel statis atau static variable adalah variabel lokal yang hanya khusus didefinisikan dalam sebuah fungsi. Akan tetapi, ia tetap mempertahankan nilainya dalam scope tersebut meskipun eksekusi program telah melewatinya.
Untuk lebih jelasnya, perhatikan kode program berikut:
<?php
function tes () {
$a = 0; # mendefinisikan variabel lokal
echo "a: {$a} <br>";
$a++; # increment variabel lokal
}
tes();
tes();
tes();
Jika dieksekusi, program di atas akan menghasilkan output seperti berikut:
a: 0
a: 0
a: 0
Kenapa nilai 0
tidak berubah padahal kita selalu men-increment-nya?
Itu karena variabel lokal, ketika program telah melewati ruang lingkupnya, ia akan dihapus.
Dan ketika fungsi tersebut dipanggil lagi, ia akan kembali membuat sebuah variabel lokal dengan nama $a
dan memberinya nilai 0
. Oleh karena itu meskipun kita memanggil fungsi tes()
sebanyak 3 kali, itu tidak berpengaruh sama sekali.
Sedangkan dengan static variable, variabel lokal tersebut tetap bisa mempertahankan nilainya sekalipun eksekusi program telah melewatinya.
Ubah kode program di atas menjadi seperti ini:
<?php
function tes () {
static $a = 0; # mendefinisikan variabel lokal
echo "a: {$a} <br>";
$a++; # increment variabel lokal
}
tes();
tes();
tes();
Jika dieksekusi, program di atas akan menghasilkan output seperti berikut:
a: 0
a: 1
a: 2
Pembahasan Selanjutnya
Setelah selesai dengan pembahasan ruang lingkup variael pada PHP beserta jenis-jenisnya, insyaallah pada pertemuan yang akan datang kita akan membahas beberapa variabel global bawaan PHP yang bisa kita gunakan.
Ikuti dan nantikan terus seri tutorial ini, jangan lupa share dan tinggalkan komentar, ya!
Terima kasih banyak.
Referensi
https://www.php.net/manual/en/language.variables.scope.php
6. Variabel Super Global
PHP: Variabel Super Global
Pada pertemuan sebelumnya di seri tutorial PHP tingkat menengah, kita telah mempelajari tentang ruang lingkup variabel mulai dari variabel global, lokal, dan statis.
Selain 3 jenis itu, di dalam PHP sebenarnya masih terdapat satu jenis variabel yang lain: yaitu variabel super global.
Apa itu Variabel Super Global di PHP?
Variabel super global di PHP adalah variabel bawaan yang bersifat global. Variabel bawaan yang dimaksud adalah: variabel yang sudah otomatis ada tanpa perlu kita definisikan sendiri. Dan ia bersifat global dalam artian bisa kita akses dari mana pun dan kapan pun.
Variabel super global menyimpan banyak sekali data penting dan juga bermanfaat yang bisa kita gunakan dalam menyelesaikan projek yang sedang kita kerjakan.
Setidaknya terdapat 9 variabel super global di PHP. Dan pada tutorial ini, kita hanya akan mempelajari dasar-dasarnya saja dan mengambil beberapa contoh ringan jika diperlakukan.
Ada pun untuk detil masing-masing penggunaannya, insyaallah akan kita pelajari pada seri tutorial PHP berikutnya.
1. Variabel $_SERVER
Variabel yang pertama dan utama adalah variabel $_SERVER
. Ia adalah sebuah array asosiatif yang menyediakan berbagai macam informasi tentang request yang ditangkap oleh server. Data yang dimuat berupa headers, paths, lokasi skrip, dan sebagainya.
Nilai yang tersimpan pada variabel $_SERVER
disediakan oleh web server, oleh karena itu tidak ada jaminan khusus bahwa setiap web server yang kita gunakan akan memberikan semua data-data standar yang ada.
Untuk bisa mengetahui nilai apa saja yang tersedia pada variabel $_SERVER
, kita bisa mengeksekusi perintah berikut:
<?php
echo json_encode($_SERVER);
Berikut ini output yang saya dapatkan setelah menginstall ekstensi JSON View pada google chrome yang saya gunakan:
Sebagai penjelasan, pada tabel berikut ini adalah beberapa contoh data pada variabel $_SERVER
yang mungkin akan sering anda butuhkan:
Tabel detail variabel $_SERVER
2. Variabel $_GET
Variabel $_GET
adalah array asosiatif yang berisi nilai dari query string.
Misalkan kita memiliki file halo-dunia.php
sebagaimana berikut:
<?php
$nama = @$_GET['nama']; # tanda @ agar tidak ada peringatan error ketika key-nya kosong
$usia = @$_GET['usia']; # tanda @ agar tidak ada peringatan error ketika key-nya kosong
echo "Halo {$nama}! Apakah benar anda berusia {$usia} tahun?";
Jika kita mengakses file tersebut dengan query string http://localhost/halo-dunia.php?nama=Budi&usia=20
, maka output yang akan kita dapatkan adalah:
Halo Budi! Apakah benar anda berusia 20 tahun?
3. Variabel $_POST
Variabel $_POST
mirip dengan variabel $_GET
. Hanya saja data yang di-passing tidaklah melalui query string pada URL, akan tetapi pada body request. Dan request method yang dilakukan haruslah dengan metode POST. Insyaallah pembahasan tentang $_GET
dan $_POST
akan kita sendirikan pada pertemuan-pertemuan yang akan datang.
4. Variabel $_SESSION
Variabel $_SESSION
merupakan array asosiatif yang menyimpan data sesi pengguna.
Variabel ini bisa kita gunakan untuk menyimpan user yang login pada satu sesi tertentu. Atau juga bisa digunakan untuk menyimpan data cart pada toko online.
Secara default, umur sesi pada PHP adalah 1440 detik atau 24 menit.
5. Variabel $_COOKIE
Mirip dengan $_SESSION
, variabel $_COOKIE
bisa kita gunakan untuk menyimpan suatu data yang berkaitan dengan user: misal informasi login, informasi cart pada toko online, dan sebagainya.
Bedanya, cookie adalah file berukuran kecil yang disimpan pada browser pengguna. File tersebut akan senantiasa dikirim setiap kali browser mengirimkan request ke server.
Umur cookie umumnya lebih panjang dari pada umur sesi.
6. Variabel $_REQUEST
Variabel $_REQUEST
adalah array asosiatif yang menyimpan gabungan nilai dari variabel $_GET
, $_POST
, dan $_COOKIE
yang kesemuanya berhubungan dengan data yang dikirim bersamaan dengan request user.
7. Variabel $_FILES
Variabel $_FILES
adalah array asosiatif yang menyimpan data file yang diunggah pengguna dalam satu request dengan metode POST atau PUT.
8. Variabel $_ENV
Variabel $_ENV
adalah array asosiatif yang berisi data tentang environment yang skrip PHP berjalan di atasnya. Variabel $_ENV
disediakan oleh shell yang menjalankan skrip PHP, sehingga nilainya bisa bervariasi tergantung dengan sistem operasi yang digunakan.
Di dalam framework PHP modern seperti laravel, variabel $_ENV
juga digunakan untuk menyimpan hal-hal yang berkaitan dengan environment seperti nama database, password database, dan nilai lainnya untuk melakukan konfigurasi framework.
9. Variabel $GLOBALS
Variabel $GLOBALS
adalah array asosiatif yang menyimpan semua variabel global yang didefinisikan saat program dijalankan. Kita telah membahas tentang variabel ini dalam pembahasan ruang lingkup variabel.
Pembahasan Selanjutnya
Sejauh ini kita telah mempelajari ruang lingkup variabel dan variabel super global pada PHP. Pada pembahasan selanjutnya insyaallah kita masih akan membahas hal-hal yang berkaitan dengan variabel: yaitu tipe data casting. Tipe data casting adalah konversi tipe data satu ke tipe data yang lain.
Bagaimana caranya? Nantikan pertemuan selanjutnya di seri tutorial php tingkat menengah ini.
Terima kasih banyak!
7. Konversi Tipe Data
PHP: Konversi Tipe Data (Eksplisit dan Implisit)
Pendahuluan
Kita ingat dari pelajaran yang telah lalu tentang tipe data dan variabel bahwa PHP tidak butuh (bahkan tidak support) pendefinisian tipe data pada suatu variabel. Kita tidak perlu menspesifikasikan tipe data apa pun terhadap variabel yang kita buat.
Semua tipe data pada suatu variabel ditentukan berdasarkan konteks data yang dimasukkan ke dalamnya. Misalkan kita memasukkan nilai string ke variabel $nama
maka variabel $nama
akan bertipe-data string, begitu juga jika kita memberikan nilai integer ke variabel $nama
, maka variabel $nama
akan dianggap bertipe-data integer.
Akan tetapi, tipe data dari suatu variabel di dalam PHP, bisa dikonversi menjadi tipe data yang lain baik secara implisit (otomatis) mau pun secara eksplisit (manual). Atau juga sering diistilahkan sebagai tipe data casting (manual) dan tipe data juggling (otomatis).
Konversi Tipe Data Secara Implisit
Konversi tipe data secara implisit sering juga disebut dengan istilah tipe data juggling. Yaitu konversi tipe data yang selesai secara otomatis oleh interpreter PHP tanpa ada campur tangan pemrogram.
Perhatikan contoh berikut:
<?php
$a = "1"; /* $a adalah string */
$a++; /* sekarang $a adalah integer (2) */
$a .= "3"; /* sekarang $a kembali menjadi string ("23") */
$a *= 0.5; /* sekarang $a berubah menjadi float (11.5) */
$b = 5 + "10 rumah"; /* $b menjadi integer (15) */
$c = 5 * "10kg beras dan 3 gram emas"; /* $c menjadi integer */
$d = 1 and "3"; /* $d bertipe data integer (1) */
$e = true and "5"; /* $e bertipe data boolean (true) */
$z = "a" and "b"; /* $z bertipe data string ("a") */
$f = "10" . "20.5"; /* $f bertipe data string (1020.25) */
$g = "10" + "20.5"; /* $g bertipe data float (30.25) */
$h = 10 + "20.5"; /* $h bertipe data float (30.5) */
$i = "10 beras" + 20.5; /* $i bertipe data float (30.5) */
$j = "beras 10" + 20.5; /* $j bertipe data float (20.5) */
Penjelasan
- PHP akan berusaha menentukan tipe data yang cocok untuk semua variabel sesuai dengan operator dan operan
- Jika variabel string dioperasikan dengan operator matematika (misal +, -, *, /), PHP akan berusaha mengonversinya menjadi tipe data numerik (entah integer atau float)
- Jika string diubah menjadi integer, PHP akan mengambil karakter pertama dari string tersebut. Jika karakter pertama adalah data numerik, PHP akan melanjutkan proses konversi ke karakter setelahnya selama tidak ada karakter non-numerik yang memisahkan.
"10"
menjadi10
"10 kambing"
menjadi10
"123 kambing dan 10 sapi"
menjadi123
"kambing 10 dan sapi 3"
menjadi0
- Operator logika (and, or) atau operator perbandingan akan mengubah data menjadi integer atau pun boolean atau apa pun tergantung dari tipe data operan yang pertama.
1 and "3"
menjadiinteger (1)
true and "5"
menadiboolean (true)
"a" and "b"
menjadistring ("a")
Konversi Tipe Data Secara Eksplisit
Membiarkan kode program kita terkonversi secara otomatis –jika tidak hati-hati– bisa menyebabkan bug aneh yang kita tidak sangka-sangka sebelumnya.
Oleh karena itu, untuk kehati-hatian, kita bisa mengkonversi tiap nilai ke tipe data yang sesuai agar kode program bisa bekerja sesuai dengan yang kita inginkan.
Hal ini disebut dengan tipe data casting atau konversi tipe data secara eksplisit.
Bagaimana caranya? Perhatikan contoh berikut:
<?php
$a = "10 rumah"; /* $a bertipe data string ("10 rumah") */
$a = (int) $a; /* $a sekarang adalah integer (10) */
$a = (bool) $a; /* $a sekarang adalah boolean (true) */
$b = 100; /* $b bertipe data integer (100) */
$b = (string) $b; /* $b sekarang adalah string ("100") */
$c = (array) $b; /* $c adalah array ["100"] */
Tipe data casting yang bisa kita lakukan di dalam PHP adalah sebagai berikut:
Kode | Keterangan |
---|---|
(int) , (integer) | Konversi ke integer |
(float) , (double) , (real) | Konversi ke float |
(bool) , (boolean) | Konversi ke boolean |
(string) | Konversi ke string |
(array) | Konversi ke array |
(object) | Konversi ke object |
(unset) | Konversi ke NULL |
Untuk contoh konversi array ke object, insyaallah akan kita bahas dalam pertemuan selanjutnya.
Kesimpulan
Dalam PHP, semua tipe data pada suatu variabel ditentukan berdasarkan konteks data yang dimasukkan ke dalamnya. Jika kita memasukkan nilai string ke variabel $nama
maka variabel $nama
akan bertipe-data string, jika kita memberikan nilai integer ke variabel $nama
, maka variabel $nama
akan dianggap bertipe-data integer.
Terkadang PHP akan mengkonversi tipe data satu ke tipe data yang lain jika dibutuhkan. Seperti misalkan dua tipe data yang berbeda dikenakan suatu operator matematika. Maka salah satu tipe datanya atau bahkan keduanya akan dikonversi menjadi tipe data yang sesuai. Hal ini disebut sebagai tipe data juggling.
Cara yang lain untuk mengkonversi tipe data adalah: dengan mendefinisikan secara eksplisit tipe data yang ingin kita konversi. Hal ini disebut sebagai tipe data casting.
Menggunakan tipe data casting sangat disarankan ketika kita membuat menulis kode program, hal itu agar kita bisa memastikan semua perintah yang kita tulis, akan dieksekusi sesuai dengan yang kita harapkan. Selain itu, menggunakan tipe data casting akan mencegah timbulnya bug-bug aneh yang tidak terprediksi.
Pembahasan Selanjutnya
Kita telah membahas dua jenis konversi tipe data dalam PHP: yaitu konversi secara otomatis atau tipe data juggling, dan konversi tipe data secara manual atau biasa disebut tipe data casting.
Untuk tipe data casting sendiri, kita telah mencoba berbagai macam contoh. Akan tetapi kita masih belum mencoba satu hal: yaitu konversi tipe data array ke object dan sebaliknya.
Pembahasan ini insyaallah akan kita ambil pada pertemuan selanjutnya.
Terima kasih banyak!
8. Mengenal stdClass
PHP: Mengenal stdClass
Pendahuluan
Pertemuan kali ini masih ada hubungannya dengan pertemuan yang sebelumnya tentang konversi tipe data PHP.
Pada pertemuan tersebut kita telah membahas bagaimana cara mengkonversi suatu tipe data ke tipe data lainnya baik secara otomatis (tipe data juggling) mau pun secara manual (tipe data casting).
Akan tetapi, masih ada satu hal yang belum kita bahas: yaitu konversi data array ke data objek, dan sebaliknya konversi data objek ke data array.
Perhatikan kode program berikut:
<?php
$mahasiswa = [
'nama' => 'Nurul Huda',
'domisili' => 'Surabaya'
];
$mahasiswa = (object) $mahasiswa;
Apa yang terjadi? Array $mahasiswa
di atas akan dikonversi menjadi instan dari objek stdClass
.
Apa Itu stdClass Dalam PHP?
Objek stdClass
adalah objek kosong bawaan PHP. Secara asal, ia tidak memiliki attribut apa pun. Objek stdClass
akan digunakan oleh interpreter PHP untuk mengkonversi tipe data non objek menjadi tipe data objek. Contohnya adalah seperti variabel $mahasiswa
di atas.
Jika kita menjalankan fungsi print_r
, kita akan melihat bahwa variabel $mahasiswa
sekarang adalah stdClass
.
<?php
echo "<pre>";
print_r($mahasiswa);
echo "</pre>";
Output:
stdClass Object
(
[nama] => Nurul Huda
[domisili] => Surabaya
)
Cara Mengakses Data Dari Objek stdClass
Pada array asosiatif, kita menampilkan data dengan memanggil key dari array tersebut dengan menggunakan tanda kurung siku ["key"]
.
Sedangkan untuk tipe data objek (termasuk stdClass), kita bisa menampilkan data-datanya dengan menggunakan tanda panah (->
). Perhatikan contoh berikut:
<?php
echo "Nama: {$mahasiswa->nama} <br>";
echo "Domisili: {$mahasiswa->domisili} <br>";
Sintaksnya lebih enak dilihat, kan?
Perintah di atas akan menghasilkan output sebagai berikut:
Nama: Nurul Huda
Domisili: Surabaya
Konversi Array ke Objek
Seperti pada contoh variabel $mahasiswa
di atas, kita bisa mengkonversi array ke sebuah objek menggunakan tipe data casting.
Akan tetapi, perlu diperhatikan, misalkan yang kita konversi adalah array multidimensi, maka yang akan dikonversi menjadi objek hanyalah array utamanya saja.
Perhatikan contoh berikut:
<?php
$mahasiswa = (object) [
"nama" => "Fulan bin Fulan",
"domisili" => "Surabaya",
"sosial_media" => [
"facebook" => "https://facebook.com/fulanbinfulan",
"instagram" => "https://instagram.com/fulan.bin.fulan",
"twitter" => "https://twitter.com/fulan_bin_fulan"
]
];
Pada kode program di atas, variabel $mahasiswa
adalah suatu objek. Karena ketika kita pertama kali mendefinisikannya, langsung kita casting dengan perintah (object) [...]
.
Akan tetapi perlu diperhatikan, bahwasanya array ke-dua dalam data $mahasiswa->sosial_media
, ia tetaplah array. Tidak terkonversi menjadi objek. Karena yang dikonversi menjadi objek hanyalah array utamanya saja, bukan array-array yang berada di dalamnya.
Jika kita menampilkan variabel $mahasiswa
dengan perintah print_r
:
<?php
echo "<pre>";
print_r($mahasiswa);
echo "</pre>";
Kita akan dapati output sebagai berikut:
stdClass Object
(
[nama] => Fulan bin Fulan
[domisili] => Surabaya
[sosial_media] => Array
(
[facebook] => https://facebook.com/fulanbinfulan
[instagram] => https://instagram.com/fulan.bin.fulan
[twitter] => https://twitter.com/fulan_bin_fulan
)
)
Lalu bagaimana jika kita ingin mengkonversi array asosiatif sosial_media
?
Caranya sama saja, kita bisa melakukannya seperti berikut ini:
<?php
$mahasiswa->sosial_media = (object) $mahasiswa->sosial_media;
Jalankan lagi program print_r
, maka sekarang kita saksikan bahwa data sosial_media
bertipe data stdClass
:
stdClass Object
(
[nama] => Fulan bin Fulan
[domisili] => Surabaya
[sosial_media] => stdClass Object
(
[facebook] => https://facebook.com/fulanbinfulan
[instagram] => https://instagram.com/fulan.bin.fulan
[twitter] => https://twitter.com/fulan_bin_fulan
)
)
Konversi Objek ke Array
Sebaliknya, kita juga bisa mengkonversi data objek ke dalam array. Caranya sama saja, kita hanya perlu mengganti sintaks (object)
dengan (array)
.
Perhatikan contoh berikut:
<?php
$mahasiswa = (object) [
"nama" => "Nurul Huda",
"domisili" => "Sidoarjo"
];
$mahasiswa = (array) $mahasiswa;
Kesimpulan
Kelas stdClass
dalam PHP adalah objek kosong yang digunakan ketika kita mengkonversi suatu data non-objek menjadi data objek.
Kita bisa mengakses data pada objek menggunakan tanda panah ->
. Selain itu, kita juga bisa mengubah data pada stdClass
sebagaimana kita mengubah data pada array.
Jika array yang kita konversi ke dalam objek ternyata bersifat multidimensi, maka hanya array utama saja yang terkonversi menjadi objek. Array-array yang lain di dalamnya tetaplah bertipe data array.
Pembahasan Selanjutnya
Insyaallah pada pembahasan selanjutnya, kita akan mengambil pelajaran tentang JSON pada PHP.
Bagaimana caranya? Ikuti terus seri tutorial PHP tingkat menengah ini, ya!
9. JSON
PHP: Bekerja Dengan JSON
Apa Itu JSON?
JSON adalah singkatan dari Javascript Object Notation.
Ia merupakan tipe data object pada bahasa pemrograman javascript. Struktur datanya jelas dan sederhana, serta mudah dibaca baik oleh mesin mau pun manusia.
Oleh karena itu, JSON merupakan cara standar untuk berkomunikasi antar dua bahasa pemrograman yang berbeda.
Bentuk penyusun utama data JSON ada 2, yaitu:
- Objek: didefinisikan dengan tanda kurung kurawal (
{}
) - Array: didefinisikan dengan tanda kurung siku (
[]
)
Perhatikan contoh berikut:
{
"nama": "Nurul Huda",
"domisili": "Surabaya",
"usia": 23,
"wni": true,
"hobi": [
"Berenang", "Berlari", "Bertamasya"
]
}
Data JSON di atas bertipe objek karena ia diapit oleh tanda kurung kurawal ({}
). Dan di dalam objek tersebut terdapat 5 buah key atau data, yaitu: nama
, domisili
bertipe data string, usia
bertipe data integer, wni
bertipe data boolean, dan hobi
bertipe data array.
Tidak harus selalu datang dalam bentuk objek, struktur data JSON bisa datang dalam bentuk array:
[
{ "nama": "Nurul Huda" },
{ "nama": "Renza Ilhami Risqi" },
{ "nama": "Taufan Aji" },
{ "nama": "Rahmad Dwi Oktanto" }
]
Pada contoh JSON di atas, ia adalah array yang memiliki 4 buah item. Kenapa array? Karena ia diapit oleh tanda kurung siku ([]
). Masing-masing item dari array tersebut adalah objek, karena masing-masing itemnya diapit oleh tanda kurung kurawal ([]
).
Parsing JSON String ke PHP
Secara kasat mata jika kita perhatikan struktur data JSON, kita akan dapati bahwa:
- ia sangat mirip dengan struktur array asosiatif pada PHP jika datang dalam bentuk objek (yaitu dengan tanda kurung kurawal)
- dan ia sangat mirip dengan struktur array terindeks pada PHP jika datang dalam bentuk array (yaitu dengan tanda kurung siku)
Pertanyaannya: jika kita memiliki suatu data JSON dalam bentuk string, lalu kita akan membacanya dalam PHP, bagaimana caranya?
Caranya adalah: menggunakan fungsi bawaan PHP bernama json_decode
.
1. Parsing JSON ke Array PHP
Kita harus perhatikan:
- jika objek JSON yang akan kita parsing ternyata dalam bentuk array: maka hasil konversinya akan berupa array pula.
- Sedangkan jika data JSON yang akan kita parsing ternyata dalam bentuk objek, maka hasil konversinya (secara asal) adalah dalam bentuk objek (instan dari kelas stdClass)
Perhatikan contoh berikut:
<?php
$dataJson = "[5, 3, 4, 2, 1]";
$data = json_decode($dataJson);
echo implode(" - ", $data);
Perintah di atas akan menghasilkan output seperti berikut:
5 - 3 - 4 - 2 - 1
Baca juga: Manipulasi Array Pada PHP
2. Parsing JSON ke Objek PHP
Kita coba masuk ke contoh yang kedua: jika ternyata objek JSON yang akan kita parsing datang dalam bentuk objek. Maka PHP (secara asal) akan mengkonversi data tersebut ke dalam objek juga. Lebih tepatnya ke dalam instan dari stdClass.
Perhatikan contoh berikut:
<?php
$json = '{
"nama": "Nurul Huda",
"domisili": "Surabaya",
"usia": 23,
"wni": true,
"hobi": [
"Berenang", "Berlari", "Bertamasya"
]
}';
$mahasiswa = json_decode($json);
echo "Nama: {$mahasiswa->nama} <br>";
echo "Domisili: {$mahasiswa->domisili} <br>";
echo "Hobi: " . implode(", ", $mahasiswa->hobi);
Jika program di atas dijalankan, maka akan menghasilkan output seperti berikut:
Nama: Nurul Huda
Domisili: Surabaya
Hobi: Berenang, Berlari, Bertamasya
Membuat JSON Dengan PHP
Jika kita ingin membuat data dalam bentuk JSON, kita bisa menggunakan fungsi bawaan PHP bernama json_encode
. Fungsi tersebut adalah kebalikan dari fungsi json_encode
: yaitu ia akan mengubah data objek atau array dalam PHP menjadi data dalam bentuk JSON.
Perhatikan contoh berikut:
<?php
$mahasiswa = [
'nama' => 'Nurul Huda',
'domisili' => 'Surabaya'
];
echo json_encode($mahasiswa);
Kode program di atas akan menghasilkan string JSON sebagaimana berikut:
{"nama":"Nurul Huda","domisili":"Surabaya"}
Atau untuk contoh array terindeks:
<?php
$nilaiUjian = [70, 80, 50, 90];
echo json_encode($nilaiUjian);
Maka kode program di atas akan menghasilkan output:
[70,80,50,90]
Melakukan Perulangan JSON
Misalkan anda memiliki string JSON sebagai berikut:
<?php
$listMahasiswaJSON = '[
{ "nama": "Nurul Huda" },
{ "nama": "Renza Ilhami Risqi" },
{ "nama": "Taufan Aji" },
{ "nama": "Rahmad Dwi Oktanto" }
]';
Lalu anda ingin menampilkan nama dari setiap data di atas. Caranya sangat sederhana sekali:
- Pertama anda parsing dulu JSON tersebut ke dalam array PHP
- Lalu lakukan perulangan dengan
foreach
atau metode perulangan yang lainnya
Perhatikan kode program berikut:
<?php
$listMahasiswaJSON = '[
{ "nama": "Nurul Huda" },
{ "nama": "Renza Ilhami Risqi" },
{ "nama": "Taufan Aji" },
{ "nama": "Rahmad Dwi Oktanto" }
]';
$listMahasiswa = json_decode($listMahasiswaJSON);
foreach ($listMahasiswa as $key => $mahasiswa) {
echo "{$key}. Nama: {$mahasiswa->nama} <br>";
}
Output:
0. Nama: Nurul Huda
1. Nama: Renza Ilhami Risqi
2. Nama: Taufan Aji
3. Nama: Rahmad Dwi Oktanto
Latihan: Menampilkan Berita Dari NewsAPI.org
Telah kita singgung di atas bahwa JSON biasa digunakan sebagai standar pertukaran data dari 2 aplikasi yang berbeda. Bahkan jika keduanya berbeda bahasa pemrograman sekalipun.
Sebagai gambaran, kita akan coba menampilkan data berita yang disediakan oleh newsapi.org. Data yang disediakan berupa JSON. Kita akan menampilkannya dengan PHP.
Langkah-langkah:
Daftar akun newsapi.org untuk mendapatkan API_KEY
Perhatikan struktur data JSON dari URL berikut:
Jangan lupa ganti
API_KEY
dengan api key akun anda.Berikut ini adalah penampakan struktur datanya:
Deklarasikan variabel-variabel:
<?php $kataKunci = "corona"; $from = "2020-02-01"; $sortBy = "publishedAt"; $apiKey = ""; /* <-- Silakan register di newsapi.org untuk mendapatkan API_KEY */ $language = "en"; $alamatAPI = "http://newsapi.org/v2/everything?" . "q={$kataKunci}&language={$language}&from={$from}" . "&sortBy={$sortBy}&apiKey={$apiKey}";
Ambil data dengan fungsi
file_get_contents
lalu parsing dengan perintahjson_decode
:<?php # ambil data json dari $alamatAPI $data = file_get_contents($alamatAPI); # parsing variabel $data ke dalam array $dataBerita = json_decode($data);
Tampilkan data dengan melakukan perulangan
foreach
:<?php if ($dataBerita->status === "ok") { # tampilkan menggunakan perulangan foreach ($dataBerita->articles as $berita) { echo "<h3><a href='{$berita->url}'>{$berita->title}</a></h3>"; if ($berita->urlToImage) { echo "<img style='width: 10rem' src='{$berita->urlToImage}'>"; } echo "<p>{$berita->description}</p>"; echo "<hr>"; } }
Dari langkah-langkah di atas, berikut adalah hasil yang saya dapatkan:
Kesimpulan
JSON adalah struktur data bawaan dalam bahasa pemrograman javascript. Akan tetapi karena ia memiliki struktur yang sederhana dan mudah, ia dijadikan sebagai standar untuk perturakan data antar 2 aplikasi yang berbeda bahkan antar 2 bahasa pemrograman yang berbeda.
Dalam PHP: kita bisa mem-parsing JSON dengan perintah json_decode
dan kita bisa membuat JSON dengan perintah json_encode
.
Pembahasan Selanjutnya
Dalam pembahasan selanjutnya, insyaallah kita akan membahas tentang jenis-jenis error dalam PHP dan juga cara menanganinya.
10. Penanganan Error 1
PHP: Jenis dan Penanganan Error [1/2]
Pendahuluan
Kemunculan error saat pengembangan suatu aplikasi adalah sesuatu yang tidak-bisa-tidak. Ia pasti terjadi. Bahkan ketika aplikasi/web yang kita kerjakan sudah rilis pun, error tetap menjadi makanan sehari-hari kita. Ia pasti dan harus muncul.
Error apa pun yang muncul, harus ditangani dengan tepat. Baik ketika aplikasi masih dalam pengembangan, lebih-leibh lagi ketika aplikasi telah dilempar ke publik.
Penangan standar terhadap suatu error adalah:
- Menampilkan pesan permohonan maaf kepada pengguna karena terjadi error
- Menyimpan atau menulis log error agar bisa kita perbaiki dengan mudah
- Mengirim pemberitahuan secara real-time ke pemrogram agar error bisa ditangani saat itu juga
Jenis-Jenis Error Pada PHP
Di dalam PHP, terdapat beberapa jenis dan tingkatan level error. Sebagiannya error yang sangat fatal sehingga program tidak bisa dilanjutkan, sebagiannya lagi hanya bersifat peringatan sehinggax` program masih bisa dilanjutkan.
Berikut ini beberapa diantara level dan jenis error yang harus diketahui pada PHP:
Konstanta | Deskripsi | Level |
---|---|---|
E_ERROR | Error fatal yang terjadi saat run-time program. Eksekusi skrip akan langsung dihentikan | 1 |
E_WARNING | Error non-fatal yang terjadi saat run-time. Skrip (setelah terjadi error) tetap dieksekusi | 2 |
E_PARSE | Error yang terjadi pada saat compile-time. Error parse ini terjadi ketika interpreter PHP mendeteksi adanya sintaks error. | 4 |
E_NOTICE | Pemberitahuan kemungkinan error pada saat run-time. Suatu baris program bisa jadi ia normal-normal saja, tapi bisa jadi error pada keadaan tertentu. | 8 |
E_USER_ERROR | Error fatal yang terjadi saat run-time program. Sama dengan E_ERROR hanya saja error jenis ini dipicu oleh pemrogram dengan memanggil fungsi trigger_error() | 256 |
E_USER_WARNING | Error non-fatal yang terjadi saat run-time. Sama dengan E_WARNING hanya saja error jenis ini dipicu oleh pemrogram dengan memanggil fungsi trigger_error() | 512 |
E_USER_NOTICE | Pemberitahuan kemungkinan error pada saat run-time. Sama dengan E_NOTICE hanya saja error jenis ini dipicu oleh pemrogram dengan memanggil fungsi trigger_error() | 1024 |
Untuk level error yang lebih lengkap, silakan merujuk ke dokumentasi manual PHP.
Cara Penanganan Error
Setiap kali menulis kode program, kita harus selalu membuat pemeriksaan pada setiap kemungkinan terjadinya error. Sehingga jika memang terjadi error pada tempat tersebut, kita bisa memberikan aksi yang tepat.
Di antara cara penanganan error yang bisa kita lakukan adalah:
- Menggunakan fungsi
die()
- Memusatkan penanganan error pada satu fungsi khusus
- Menggunakan exception
Menggunakan Fungsi die()
Misalkan kita akan membuka dan membaca suatu file dengan PHP, kita harus memeriksa terlebih dahulu apakah file tersebut tersedia atau tidak. Jika ternyata file tidak tersedia, kita bisa menghentikan run-time program dengan memanggil fungsi die()
.
Perhatikan kode program berikut:
<?php
$namaFile = "/web/documents/histori.txt";
if (!file_exists($namaFile)) {
die("File tidak ditemukan");
} else {
$file = fopen($namaFile, "r");
echo "File berhasil dibaca.";
}
// lanjutkan kode jika file berhasil dibaca
Pemusatan Error Handling
Selain cara menggunakan if else
seperti di atas, kita bisa melakukan cara yang lebih umum yaitu dengan memusatkan error handling dalam satu fungsi saja.
Sehingga setiap kali ada error dari setiap level, fungsi tersebut akan otomatis dipanggil. Setelah itu, kita bisa memutuskan apa yang akan kita lakukan dengan error yang terjadi tersebut.
Langkah-langkahnya adalah:
1. Membuat fungsi
Langkah yang pertama adalah membuat fungsi khusus untuk menangani error.
Fungsi tersebut harus memiliki 5 buah parameter:
- $errLevel: berisi konstanta tipa error level
- $errMessage: berisi label/pesan dari error
- $errFile: berisi file di mana error terjadi
- $errLine: berisi baris di mana error terjadi
Sebelum itu, jangan lupa kita non aktifkan semua pesan error. Karena beberapa pengaturan bawaan PHP di sistem operasi tertentu pesan error akan ditampilkan secara default. Sehingga kita harus mengaturnya mandiri dengan mengubah nilai di file php.ini
mau pun dengan memanggil fungsi error_reporting()
.
<?php
# sembunyikan semua pesan error bawaan PHP
error_reporting(0);
/**
* Fungsi untuk menangai error.
*
* Fungsi ini wajib memiliki 4 paramter dan nama parameter bisa bebas.
*/
function tanganiError ($level, $message, $file, $line) {
echo "<div style='padding: 2rem; background: rgba(200, 0, 0, 0.5); color: white'>";
echo "<b>Terjadi Error</b>";
echo "<p>[{$level}] {$message} - {$file}:{$line}</p>";
echo "</div>";
}
2. Mengatur fungsi tersebut sebagai error handler
Kita telah membuat fungsi tanganiError()
. Fungsi tersebut menerima 5 buah parameter.
Yang harus kita lakukan selanjutnya adalah mengatur fungsi tersebut sebagai error handler. Sehingga jika terjadi error apa pun pada saat run-time, fungsi tersebut akan dieksekusi.
Untuk mengatur error handler kita bisa memanggil fungsi bawaan PHP bernama set_error_handler
.
<?php
set_error_handler('tanganiError');
3. Testing error
Kita coba memicu sebuah error dengan memanggil variabel yang tidak pernah kita definisikan sebelumnya.
Setelah program dijalankan, berikut ini output yang saya dapatkan:
Menggunakan Shutdown Function
Cara di atas memang sekilas berhasil, akan tetapi cara tersebut tidak berfungsi untuk semua jenis error.
Kita telah berusaha memanggil suatu variabel yang belum pernah kita definisikan sebelumnya.
Akan tetapi jika kita memanggil sebuah fungsi yang tidak pernah didefinisikan, level error yang dihasilkan adalah: E_ERROR
. Dan level ini tidak didukung oleh set_error_handler
. Sehingga fungsi tanganiError()
tidak pernah dipanggil.
Coba kode program berikut:
<?php
# fungsi selamatPagi() tidak pernah kita definisikan
selamatPagi();
Dan setelah dieksekusi, fungsi tanganiError()
yang telah kita set sebagai error handler ternyata memang tidak dianggil. Ini tangkapan layar dari apa yang saya dapat:
Lalu bagaimana caranya?
Agar kita bisa menangani error level E_ERROR
, kita punya pilihan untuk menggunakan shutdown function.
Shutdown function adalah fungsi yang akan dipanggil sesaat ketika program PHP akan selesai. Entah terjadi error E_ERROR
atau tidak.
Mendaftarkan fungsi anonim sebagai shutdown function
Berikut ini contoh untuk mendaftarkan sebuah fungsi anonim sebagai shutdown function. Fungsi ini akan mengambil error terakhir yang terjadi pada saat run-time, lalu akan memanggil fungsi tanganiError()
jika memang ada error.
<?php
register_shutdown_function(function () {
if (error_get_last()) {
# ambil error terakhir
$error = (object) error_get_last();
tanganiError(
$error->type, $error->message, $error->file, $error->line
);
}
});
Coba panggil lagi fungsi selamatPagi()
:
<?php
# fungsi selamatPagi() tidak pernah didefinisikan
selamatPagi();
Hasilnya:
Sembunyikan Semua Output Ketika Terjadi Error
Kita telah berhasil menangani error E_ERROR
menggunakan shutdown function. Akan tetapi, jika kita perhatikan, output apa pun sebelum terjadi error akan tetap ditampilkan.
Perhatikan kode program berikut:
<?php
echo "<h1>Selamat Datang</h1>";
echo "<h2>Ini adalah halaman utama</h2>";
# fungsi selamatPagi() tidak pernah didefinisikan
selamatPagi();
echo "<p>Semoga bermanfaat</p>";
Kode program di atas akan menghasilkan output sebagai berikut:
Menggunakan fungsi ob_start()
dan ob_end_flush()
Fungsi ob_start()
akan menyimpan semua output dalam internal buffer PHP. Sehingga output tidak langsung ditampilkan ke dalam browser melainkan akan ditampilkan terakhir-terakhir menjelang program PHP selesai dieksekusi.
Tambahkan fungsi ob_start()
sebelum output pertama, dan panggil fungsi ob_end_flush()
setelah output terakhir.
<?php
ob_start();
echo "<h1>Selamat Datang</h1>";
echo "<h2>Ini adalah halaman utama</h2>";
# fungsi selamatPagi() tidak pernah didefinisikan
selamatPagi();
ob_end_flush();
Panggil fungsi ob_end_clean()
untuk menghapus output
Setelah itu, kita bisa memanggil fungsi ob_end_clean()
untuk menghapus semua output yang terisimpan dalam internal buffer. Dalam artian output tersebut tidak jadi ditampilkan.
Fungsi tersebut kita panggil pada saat teradi error:
<?php
register_shutdown_function(function () {
if (error_get_last()) {
# ambil error terakhir
$error = (object) error_get_last();
# hapus semua output sebelum terjadi error
ob_end_clean();
tanganiError(
$error->type, $error->message, $error->file, $error->line
);
}
});
Ketika program kita jalankan lagi, kita akan dapati semua output sebelum terjadi error, ia tidak ditampilkan.
Menangani Sintaks Error
Kita sejauh ini telah berhasil menangani berbagai macam jenis error bahkan sampai fatal error sekalipun.
Akan tetapi, kode program yang telah kita buat di atas tidak bisa menangani sintaks error. Misalkan kita menghapus satu tanda titik koma (;
), program kita akan error dan fungsi penanganan error yang sudah kita buat tidak akan pernah dipanggil meskipun kita sudah membuat shutdown function.
Lalu, bagaimana cara mengatasi error E_PARSE
alias sintaks error?
Caranya sama saja, yang kita perlu tahu adalah:
- Error handle harus tidak ada error
- File utama yang dieksekusi tidak boleh ada error
- Error sintaks harus berada di file sekunder (selain file utama)
Langsung saja kita praktikkan, kita akan pecah kode program yang telah kita buat sebelumnya menjadi 3 file sebagai berikut:
├── src/
| ├── file-yang-error.php
| ├── index.php
| └── penanganan-error.php
├── ...
Penjelasan:
- File
index.php
adalah file utama, yang artinya file tersebut adalah file yang kita request (melalui browser) - Semua error handling kita sendirikan di dalam file
penanganan-error.php
- File yang berisi sintaks error (atau error apa pun lainnya) kita letakkan pada
file-yang-error.php
Berikut adalah kode program file index.php
:
<?php
require_once 'penanganan-error.php'; /* <-- shutdown fungsi berada di sini */
ob_start();
require 'file-yang-error.php'; /* <-- file yang berisi error */
ob_end_flush();
Nah ketika di file-yang-error.php
terdapat error secara sintaks, PHP masih tetap bisa menjalankan file utama yaitu index.php
dan shutdown function yang telah kita definisikan di file penanganan-error.php
bisa dijalankan.
<?php
echo "<h1>Selamat Datang</h1>";
echo "<h2>Ini adalah halaman utama</h2>";
# fungsi selamatPagi() tidak pernah didefinisikan
selamatPagi() # dia juga tidak ada titik koma
echo "Halo pemirsah!";
Kode Program Lengkap
Untuk kode program lengkap pada pertemuan ini bisa anda akses di sini.
Kesimpulan
Di dalam PHP terdapat berbagai jenis level error. Mulai dari yang fatal hingga menghentikan program. Ada yang tidak sampai level tersebut sehingga program masih memungkinkan untuk dilanjutkan.
Untuk menangani error pada PHP, terdapat berbagai macam pendekatan. Dalam pertemuan di atas kita telah menggunakan setidaknya 2 buah pendekatan inti:
- Menggunakan
set_error_handler()
- Dan Menggunakan
register_shutdown_function()
Tidak hanya itu, kita juga telah berhasil menyembunyikan semua output yang di-echo sebelum terjadinya error memanfaatkan fungsi ob_start()
dan ob_end_clean()
.
Pembahasan Selanjutnya
Pada pembahasan selanjutnya, insyaallah kita masih akan membahas tentang penanganan error. Akan tetapi menggunakan cara yang lebih modern yaitu Exception. Cara ini adalah fitur baru di PHP 5, dan pendekatan ini juga mirip dengan bahasa pemrograman modern lainnya.
11. Penanganan Exception
PHP: Penanganan Exception [2/2]
Pendahuluan
Kemunculan error saat pengembangan suatu aplikasi adalah sesuatu yang tidak-bisa-tidak. Ia pasti terjadi. Bahkan ketika aplikasi/web yang kita kerjakan sudah rilis pun, error tetap menjadi makanan sehari-hari kita. Ia pasti dan harus muncul.
Error apa pun yang muncul, harus ditangani dengan tepat. Baik ketika aplikasi masih dalam pengembangan, lebih-leibh lagi ketika aplikasi telah dilempar ke publik.
Pada pertemuan sebelumnya, kita telah mempelajari tentang error handling. Sedangkan pada pertemuan kali ini, kita akan mempelajari tentang exception handling.
Jika anda pernah belajar bahasa pemrograman lain sebelumnya, mungkin anda kira kedua hal tersebut sama saja. Tapi di PHP, keduanya (dulu) adalah dua hal yang berbeda.
Apa itu Exception?
Exception adalah cara baru untuk menangani error pada PHP. Ia menggunakan pendekatan OOP (Object Oriented Programming) berbeda dengan sebelumnya (versi < 5) yang mana pendekatan yang dilakukan masih prosedural.
Exception secara bahasa berarti pengecualian. Sedangkan secara istilah di dalam PHP, ia adalah sebuah perubahan alur program dari kondisi normal ke kondisi tertentu (atau pengecualian tertentu) jika terjadi suatu error (exception).
Bisa kita katakan: exception adalah bagian kode program yang membutuhkan perlakuan khsusus karena ia berjalan tidak sesuai dengan yang seharusnya.
Exception pertama kali datang pada PHP versi 5 sebagai basis kelas dari semua Exception. Dan sejak PHP versi 7, ia adalah basis kelas untuk semua user-error level [1].
Error Handling vs Exception Handling
Sebelum PHP 7, Error handling dan exception handling bisa dikatakan adalah dua hal yang berbeda. Pada PHP 5, kita bisa menangani error apa pun yang terjadi selama error tersebut tidak sampai level fatal. Sedangkan exception, ia adalah cara baru (di PHP 5) untuk menangani error, akan tetapi fatal error tetap tidak dianggap suatu exception.
Sedangkan setelah rilis PHP versi 7, semua fatal error akan melemparkan sebuah exception yang bisa kita tangkap menggunakan try-catch
[2].
Perlu diperhatikan: beberapa level error seperti E_WARNING
, E_NOTICE
dan sebagainya tidak bisa kita catch karena keduanya bukan merupakan error yang serius.
Untuk membuat error-error “ringan” menjadi error yang dianggap serius, anda bisa menggunakan fungsi set_error_handler
seperti yang telah kita pelajari dalam pertemuan sebelumnya.
Menangani Exception Dengan Try-Catch
Blok kode try .. catch
akan memerintahkan interpreter PHP untuk mencoba mengeksekusi kode program pada blok try, dan jika terjadi suatu exception/error, fungsi catch akan dieksekusi.
Perhatikan contoh berikut:
<?php
try {
echo "Halo bro! <br>";
selamatPagi(); # fungsi tidak pernah didefinisikan
} catch (Exception $error) {
echo "Error: {$error->getMessage()}";
}
Program di atas akan menghasilkan output:
Halo bro!
Error: Call to undefined function selamatPagi()
Membuat dan Melempar Exception Baru
Selain melakukan catching dari error bawaan PHP, kita juga bisa membuat exception kita sendiri dengan meng-override kelas Exception
.
Perhatikan contoh fungsi rerataNilai()
berikut. Kita akan mencoba untuk melempar objek Exception
baru.
<?php
function rerataNilai (array $listNilai) {
if (count($listNilai) < 1) {
# jika array kosong, dia akan melempar objek Exception baru
throw new Exception('Array tidak boleh kosong!');
}
# hitung rata-rata
$total = 0;
foreach ($listNilai as $nilai) {
$total += $nilai;
}
return $total / count($listNilai);
}
Pada fungsi di atas, jika parameter $nilai
adalah array kosong, maka exception baru akan dikembalikan. Sedangkan jika tidak, maka kode program selanjutnya akan dieksekusi.
Kita coba panggil fungsi rerataNilai
dengan memberi parameter array kosong.
<?php
try {
$arrayKosong = [];
# panggil fungsi rerataNilai() dengan parameter array kosong
$rataRata = rerataNilai($arrayKosong);
} catch (Exception $error) {
echo "Error: {$error->getMessage()}";
}
Meng-extends Kelas Exception
Kita juga bisa membuat kelas Exception
baru dengan meng-extends kelas bawaan PHP.
Misalkan kita ingin membuat Exception
dengan nama ParameterFungsiSalahException
. Kita bisa membuatnya seperti berikut:
<?php
class ParameterFungsiSalahException extends Exception {
# kita buat kosongan sehingga kelas ini identik dengan parent-nya
}
Lalu kita bisa melempar exception yang telah kita buat seperti berikut:
<?php
function rerataNilai (array $listNilai) {
if (count($listNilai) < 1) {
# jika array kosong, dia akan melempar objek Exception baru
throw new ParameterFungsiSalahException('Array tidak boleh kosong!');
}
# hitung rata-rata
# ...
}
Multiple Exception
Di dalam PHP, kita bisa menangkap (meng-catch) lebih dari satu exception sekaligus. Hal ini biasa disebut multiple exception.
Untuk melakukannya, kita tinggal menulis blok kode catch {}
berkali-kali.
Perhatikan contoh berikut:
<?php
$a = 5;
$b = 0;
try {
if ($b < 1) {
throw new DivisionByZeroError('Variabel $b tidak boleh 0');
}
echo $a / $b;
} catch (ArgumentCountError $error) {
echo "ArgumentCountError exception: " . $error->getMessage();
} catch (DivisionByZeroError $error) {
echo "DivisionByZeroError exception: " . $error->getMessage();
} catch (Exception $error) {
echo "Exception: " . $error->getMessage();
}
Kode program di atas akan menghasilkan output:
DivisionByZeroError exception: Variabel $b tidak boleh 0
Blok Kode Finally
Selain blok kode try
dan catch
, kita juga bisa menambahkan blok kode finally
. Ia adalah blok kode yang akan senantiasa dieksekusi oleh sistem: baik kode program di dalam blok kode try
berhasil dijalankan mau pun terjadi error.
Perhatikan kode program di bawah:
<?php
try {
# perintah ini tidak menimbulkan error
echo "8 + 10 = " . (8 + 10) . "<br>";
} catch (Exception $error) {
echo "Oops, sepertinya sistem kami sedang error <br>";
} finally {
echo "Aku akan senantiasa dieksekusi <br>";
}
Output:
8 + 10 = 18
Aku akan senantiasa dieksekusi
Kelas Exception Bawaan PHP (Sampai Versi 7.4)
Seiring dengan perkembangannya, PHP sampai versi 7.4 telah datang dengan berbagai macam kelas Exception secara default. Berikut ini daftar exception tersebut:
- Exception
- ErrorException
- Error
- ArgumentCountError
- ArithmeticError
- AssertionError
- DivisionByZeroError
- CompileError
- ParseError
- TypeError
Kesimpulan
Exception adalah cara baru untuk menangani error pada PHP. Ia menggunakan pendekatan OOP (Object Oriented Programming) berbeda dengan sebelumnya (versi < 5) yang mana pendekatan yang dilakukan masih prosedural.
Exception secara bahasa berarti pengecualian. Sedangkan secara istilah di dalam PHP, ia adalah sebuah perubahan alur program dari kondisi normal ke kondisi tertentu (atau pengecualian tertentu) jika terjadi suatu error (exception).
Di dalam PHP, kita bisa menggunakan blok kode try
dan catch
untuk menangani exception yang bersifat fatal. Sedangkan yang tidak fatal: kita bisa menggunakan fungsi set_error_handler()
seperti yang telah kita pelajari pada pertemuan sebelumnya.
Pembahasan Selanjutnya
Pada pertemuan selanjutnya, insyaallah kita akan membahas cara mengelola (membaca dan menulis) file dengan bahasa pemrograman PHP.
Referensi
[1] https://www.php.net/manual/en/class.exception - diakses tanggal 4 Maret 2020
[2] https://dev.to/anastasionico/good-practices-handling-error-and-exceptions-in-php-5d8c - diakses tanggal 4 Maret 2020
12. Manipulasi File 1
PHP: Manipulasi File [1/2]
Pendahuluan
Di dalam tutorial ini kita akan membahas tentang cara manipulasi file di dalam PHP menggunakan fungsi-fungsi bawaan. Mulai dari berbagai cara untuk membaca file, menulis, menimpa file yang sudah ada dan juga menghapusnya.
Pembahasan ini akan kita bagi menjadi dua bagian: bagian pertama akan membahas cara membaca dan membuka file di dalam PHP. Sedangkan fungsi-fungsi sisanya akan kita bahas pada pertemuan ke-2.
Memeriksa Ketersediaan File
Sebelum kita memulai membaca file, kita akan mengenal fungsi file_exists()
terlebih dahulu. Fungsi tersebut berfungsi untuk memeriksa apakah suatu file benar-benar exist atau tidak.
Jika file yang kita maksudkan ternyata memang ada, maka ia akan mengembalikan nilai true
, dan sebaliknya jika file yang kita maksud ternyata tidak ada, dia akan mengembalikan nilai false
.
Perhatikan contoh berikut:
<?php
if (file_exists('buah.txt')) {
// file ada
} else {
echo "File buah.txt tidak ditemukan <br>";
}
Jika file bernama buah.txt
tidak ada, maka blok kode else
yang akan dieksekusi oleh interpreter PHP.
Membaca File Dengan readfile()
Katakanlah kita memiliki sebuah file bernama buah.txt
. File tersebut berisi nama-nama buah di tiap barisnya:
Mangga
Jeruk
Apel
Durian
Anggur
Lalu kita akan membacanya dengan PHP. Cara pertama yang bisa kita lakukan adalah menggunakan fungsi readfile()
. Perhatikan contoh berikut:
<?php
echo readfile('buah.txt');
Fungsi readfile()
akan membaca semua baris dari file buah.txt
lalu diikuti ukuran file dalam satuan byte. Oleh karena itu kode program di atas akan menghasilkan output sebagai berikut:
Mangga Jeruk Apel Durian Anggur31
Fungsi readfile()
bukan lah fungsi yang disarankan untuk membaca file karena keterbatasan fitur-fiturnya.
Membaca File Dengan file_get_contents()
Cara yang kedua adalah dengan menggunakan fungsi file_get_contents()
. Fungsi tersebut bisa untuk membaca berbagai file, baik secara lokal mau pun global (maksudnya url suatu situs tertentu), dan juga bisa membaca berbagai format file baik itu gambar, teks, json, xml, dan lain-lain.
Kita akan coba membaca isi dari file buah.txt
. Perhatikan contoh program berikut:
<?php
echo file_get_contents('buah.txt');
Output:
Mangga Jeruk Apel Durian Anggur
Jika anda mengubah karakter \n
menjadi tag <br>
menggunakan fungsi nl2br2()
sebagaimana berikut:
<?php
echo nl2br(file_get_contents('buah.txt'));
Maka anda akan mendapatkan output yang sama persis dengan isi dari file buah.txt
:
Mangga
Jeruk
Apel
Durian
Anggur
Membaca File Dengan file()
Di antara fungsi bawaan PHP yang bisa kita gunakan untuk membaca keseluruhan isi file adalah fungsi bernama file()
. Ia melakukan tugas yang sama dengan fungsi file_get_contents()
.
Hanya saja, fungsi file()
mengembalikan konten dari suatu file dalam bentuk array untuk tiap barisnya. Berbeda dengan fungsi file_get_contents()
yang mengembalikan seluruh konten dari suatu file dalam bentuk string utuh.
Perhatikan contoh berikut:
<?php
$isiFileBuah = file('buah.txt');
echo '<pre>';
print_r($isiFileBuah);
echo '</pre>';
Output:
Array
(
[0] => Mangga
[1] => Jeruk
[2] => Apel
[3] => Durian
[4] => Anggur
)
Kita juga bisa menampilkannya dengan foreach
sebagaimana telah kita pelajari pada tutorial perulangan dan juga tutorial tentang manipulasi array.
Membaca File Dengan fopen()
, fread()
dan fclose()
Cara selanjutnya adalah dengan menggunakan fopen()
, fread()
dan fclose()
.
Cara ini lebih ribet dari sebelumnya, lebih banyak stepnya, tapi lebih direkomendasikan untuk kasus-kasus tertentu karena banyak fungsi yang bisa kita lakukan.
Skenario umumnya adalah 3 langkah:
- Kita buka file yang kita inginkan dengan fungsi
fopen()
- Setelah file kita buka, kita bisa membaca isi file tersebut dengan fungsi
fread()
. - Ketika proses selesai, kita bisa menutup file tersebut dan menghapusnya dari memori menggunakan fungsi
fclose()
.
Perhatikan contoh berikut, kita masih akan bermain-main dengan file buah.txt
:
<?php
$file = fopen('buah.txt', 'r');
if (!$file) {
die('File tidak ada');
}
# mulai baca file
echo fread($file, filesize('buah.txt'));
# tutup file agar ia dihapus dari memory
fclose($file);
Output:
Mangga Jeruk Apel Durian Anggur
Penjelasan
Dari kode program di atas, kita akan menjelaskan beberapa hal sebagai berikut:
- fungsi
fopen()
menerima dua parameter:- parameter pertama adalah nama file
- sedangkan parameter kedua adalah mode pembukaan file tersebut. Di dalam kode program di atas, kita menggunakan mode
r
yang artinya read. - Apa saja mode yang tersedia? Kita akan simak beberapa saat lagi.
- fungsi
fopen()
akan bernilaifalse
jika file yang kita maksud ternyata tidak ada. - fungsi
fread()
menerima 2 parameter:- parameter pertama yaitu hasil kembalian dari fungsi
fopen()
- dan parameter kedua berisi berapa byte yang akan dibaca dari file tersebut
- paramter kedua kita isi dengan fungsi
filesize('buah.txt')
agar isi file tersebut terbaca semuanya.
- parameter pertama yaitu hasil kembalian dari fungsi
- setelah proses yang berkaitan dengan variabel
$file
selesai, kita tutup dengan fungsifclose()
yang menerima parameter hasil kembalian dari fungsifopen()
.
Mode yang tersedia untuk fungsi fopen()
Mode | Deskripsi |
---|---|
r | Membuka file dalam mode read only. |
w | Membuka file dalam mode write only. Ia akan menghapus keseluruhan isi file dan menimpanya dengan yang baru, atau jika file tersebut belum pernah ada, ia akan membuatnya terlebih dahulu. |
a | Membuka file dalam mode write only. Isi dari file yang sebelumnya tetap dipertahankan. |
x | Membuat file baru dalam mode write only. Mengembalikan nilai false jika file telah ada sebelumnya. |
r+ | Membuka file dalam mode read dan write. |
w+ | Membuka file dalam mode read dan write. Menghapus konten file sebelumnya atau membuat file baru jika belum ada. |
a+ | Membuka file dalam mode read dan write. Sama seperti w+ akan tetapi konten file yang sebelumnya tidak dihapus. |
x+ | Membuka file dalam mode read dan write. Mengembalikan nilai false jika file telah ada sebelumnya. |
Membaca File Perbaris dengan fgets()
Selain menggunakan fungsi fread()
untuk membaca konten dari suatu file. Kita juga bisa menggunakan fungsi fgets()
.
Bedanya?
Jika menggunakan fread()
berarti kita akan membaca konten dari suatu file sesuai dengan ukuran byte yang kita definisikan. Sedangkan jika menggunakan fungsi fgets()
, maka kita membaca konten perbaris.
Perhatikan contoh berikut:
<?php
$file = fopen('buah.txt', 'r');
if (!$file) {
die('File tidak ada');
}
# mulai baca file
echo fgets($file) . '<br>'; # baris 1
echo fgets($file) . '<br>'; # baris 2
echo fgets($file) . '<br>'; # baris 3
echo fgets($file) . '<br>'; # baris 4
echo fgets($file) . '<br>'; # baris 5
# tutup file agar ia dihapus dari memory
fclose($file);
Kode program di atas akan menghasilkan output sebagai berikut:
Mangga
Jeruk
Apel
Durian
Anggur
Mengetahui Akhir Baris Suatu File
Dari kode program sebelum ini, kita tahu bahwa pointer dari proses pembacaan file akan berpindah dengan memanggil fungsi fgets()
. Sehingga kita bisa menampilkan semua baris dari suatu file dengan memanggil fgets()
sebanyak jumlah baris tersebut.
Akan tetapi, bagaimana caranya kita tahu bahwa pointer pembacaan file telah berada pada baris paling bawah?
Jawabannya adalah menggunakan fungsi feof()
. Kata eof sendiri adalah singkatan dari end-of-file. Fungsi tersebut akan mengembalikan nilai true
jika pointer berada pada baris paling akhir, dan jika tidak maka ia akan mengembalikan nilai false
.
Perhatikan kode program berikut:
<?php
$file = fopen('buah.txt', 'r');
if (!$file) {
die('File tidak ada');
}
# lakukan perulangan selama feof bernilai false
while (!feof($file)) {
echo fgets($file) . '<br>';
}
# tutup file agar ia dihapus dari memory
fclose($file);
Kesimpulan
Bahasa pemrograman PHP adalah bahasa yang berjalan di server. Sehingga proses manipulasi file adalah suatu hal yang hampir menjadi keniscayaan.
Untuk membaca file, kita bisa menggunakan beberapa cara. Mulai dari fungsi readfile()
, fungsi file_get_contents()
, fungsi file()
, fungsi fread()
dan juga fgets()
.
Pembahasan Selanjutnya
Pada pembahasan selanjutnya, insyaallah kita masih dalam pembahasan manipulasi file bagian kedua. Yaitu tentang membuat file baru, mengedit, dan juga menghapus.
13. Manipulasi File 2
PHP: Manipulasi File [2/2]
Pendahuluan
Pada pertemuan sebelumnya, kita telah mempelajari beberapa cara untuk membuka dan membaca file dengan PHP. Mulai dari menggunakan fungsi readfile()
, fungsi file_get_contents()
hingga menggunakan skema fopen()
dan variasinya.
Pada pertemuan kali ini, kita akan melanjutkan pembahasan tentang manipulasi file.
Membuat File Baru Dengan fopen()
Seperti yang sudah kita singgung sebelumnya, bahwa fungsi fopen()
menerima dua buah paramter:
- parameter pertama adalah nama file
- parameter kedua adalah mode pembukaan file
Untuk membuat file baru, kita bisa menggunakan mode w
, a
, w+
atau a+
. Silakan kembali lagi ke pertemuan sebelumnya untuk melihat jenis-jenis mode fopen()
yang bisa kita gunakan.
Sebagai contoh, untuk membuat file baru. Kita bisa menggunakan perintah berikut:
<?php
$namaFile = 'nama-bulan.txt';
$file = fopen($namaFile, 'w');
Kode program di atas akan membuat file baru bernama nama-bulan.txt
.
Permission File
Kode program di atas tidak mengeluarkan output apa pun.
Akan tetapi jika anda mendapatkan pesan error, maka pastikan bahwa PHP anda memiliki hak akses untuk menulis file pada lokasi yang terkait.
Menulis/Mengedit Konten File Dengan fwrite()
Kita telah berhasil membuat file baru dengan nama nama-bulan.txt
. Tapi jika file tersebut kita buka, kita tidak akan mendapati apa pun di sana.
Kita bisa menambahkan konten pada suatu file dengan perintah fwrite()
.
Ada pun behavior bagaimana cara menulis kontennya: apakah ia menimpa konten yang sudah ada, atau ia tetap mempertahankan konten file sebelumnya, maka itu tergantung mode yang kita pilih saat memanggil fungsi fopen()
.
Setelah ini, kita akan mencoba dan mempraktikkan beberapa mode fopen()
.
Menghapus Konten dan Menimpanya Dengan Yang Baru
Mode yang pertama adalah mode w
. Alias mode write only. Mode tersebut memiliki 2 tugas utama:
- membuat file baru jika file-nya tidak ada (sudah kita praktikkan di atas)
- meletakkan pointer ke baris pertama konten, sehingga ketika kita lakukan proses penulisan dengan fungsi
fwrite()
, isi konten yang lama akan ditimpa dengan yang baru.
Kita telah membuat file nama-bulan.txt
. Kita akan coba untuk menulis sesuatu di dalam file tersebut. Perhatikan kode program berikut:
<?php
$namaFile = 'nama-bulan.txt';
$file = fopen($namaFile, 'w');
$konten = "Januari\nFebruari\nMaret\nApril\nMei";
fwrite($file, $konten);
fclose($file);
Ketika kita jalankan program di atas lalu kita buka file nama-bulan.txt
. Kita akan mendapati konten file tersebut adalah sebagai berikut:
Januari
Februari
Maret
April
Mei
Anda bisa:
- mengganti isi dari variabel
$konten
- lalu mengeksekusi ulang skrip tersebut
- kemudian lihat apa yang terjadi dengan isi dari file
nama-bulan.txt
Mengedit Dengan Mempertahankan Konten Sebelumnya
Setelah melakukan percobaan di atas, kita tahu bahwa file nama-bulan.txt
akan senantiasa ditimpa dengan konten baru karena kita menggunakan mode w
ketika memanggil fungsi fopen()
.
Berbeda jika kita menggunakan mode a
, maka behavior yang akan kita dapatkan adalah:
- sistem akan berusaha membuka file yang dimaksud. Jika tidak ada, ia akan membuatnya.
- sistem akan meletakkan pointer pada bagian paling akhir dari file tanpa menghapus konten yang sebelumnya sudah ada.
Silakan ganti kode program di atas dengan kode program yang baru:
<?php
$namaFile = 'nama-bulan.txt';
$file = fopen($namaFile, 'a');
$konten = "Juni\nJuli\nAgustus\nSeptember\nOktober";
fwrite($file, $konten);
fclose($file);
Ketika saya jalankan kode program di atas sebanyak satu kali, saya mendapatkan output sebagai berikut:
Januari
Februari
Maret
April
MeiJuni
Juli
Agustus
September
Oktober
Perhatikan baris ke 5 dari output di atas, kata “Mei” dan “Juni” bergabung jadi satu. Itu karena output dari file sebelumnya tidak diakhiri dengan kode \n
alias karakter ganti baris.
Untuk mode lainnya dari fopen()
anda bisa melihatnya lagi pada tutorial manipulasi file php bagian 1. Anda bisa mengeksplorasinya secara mandiri.
Mengkopi File
Di antara hal yang lazim dilakukan dalam rangka memanipulasi file dalam PHP adalah: mengkopi file.
Untuk mengkopi atau menggandakan file, kita bisa memanggil fungsi bawaan PHP bernama copy()
.
Fungsi tersebut menerima 2 parameter:
- Parameter untuk nama file yang akan dikopi
- Lokasi/Nama file baru hasil kopian
Perhatikan contoh berikut, kita akan menggandakan file nama-bulan.txt
yang telah kita buat:
<?php
copy('nama-bulan.txt', 'nama-bulan-indo.txt');
Kita akan mendapatkan file baru yaitu nama-bulan-indo.txt
.
├── 13-manipulasi-file-part-2
├── index.php
├── nama-bulan-indo.txt
└── nama-bulan.txt
Memindahkan dan Merename File
Untuk memindahkan file, anda bisa menggunakan fungsi rename()
. Cara kerjanya sama saja dengan fungsi copy()
.
Ia menerima 2 paramter:
- parameter untuk nama/path file yang lama
- parameter untuk nama/path file yang baru
Fungsi rename()
akan memindahkan suatu file dari lokasi lama ke lokasi baru. Jika lokasi baru ternyata masih dalam satu direktori dan nama filenya berbeda, maka fungsi tersebut secara tidak langsung akan merename file yang dimaksud.
Kita akan coba memindahkan file nama-bulan.txt
ke lokasi yang sama, tapi dengan nama baru yaitu nama-bulan-old.txt
. Perhatikan kode program berikut:
<?php
rename('nama-bulan.txt', 'nama-bulan-old.txt');
Jika kita eksekusi, maka file nama-bulan.txt
seolah-olah ter-rename dengan menggunakan fungsi rename()
.
├── 13-manipulasi-file-part-2
├── index.php
├── nama-bulan-indo.txt
└── nama-bulan-old.txt
Menghapus File
Untuk menghapus file, kita bisa menggunakan fungsi unlink()
.
Perhatikan kode program berikut:
<?php
unlink('nama-bulan-old.txt');
Kode program di atas akan menghapus file nama-bulan-old.txt
.
Beberapa Fungsi Lainnya
Selain fungsi-fungsi yang telah kita pelajari di dua pertemuan ini, masih ada fungsi-fungsi lain yang bisa anda coba:
mkdir()
: berfungsi untuk membuat sebuah direktorirmdir()
: menghapus suatu folder. Tapi foldernya harus kosong.is_dir()
: berfungsi untuk memeriksa apakah suatu path adalah direktori atau bukanis_file()
: berfungsi untuk memeriksa apakah suatu path adalah file atau bukanscandir()
: mengembalikan konten dari sebuah direktori dalam bentuk array (konten bisa berupa file dan juga sub-direktori)getcwd()
: mengembalikan lokasi direktori yang sedang aktif
Kesimpulan
Bahasa pemrograman PHP adalah bahasa yang berjalan di server. Sehingga proses manipulasi file adalah suatu hal yang hampir menjadi keniscayaan.
Oleh karena itu, tidak heran bahwasanya PHP datang dengan berbagai macam fungsi bawaan yang memungkinkan kita bisa memanipulasi file mau pun direktori dengan mudah.
Pembahasan Selanjutnya
Pada pertemuan selanjutnya, insyaallah kita akan mengambil pembahasan terakhir untuk seri tutorial PHP tingkat menengah ini: yaitu pembahasan tentang regular expression.
Jangan lupa untuk share tutorial ini, ya! Terima kasih banyak.
14. Regular Expression
PHP: Belajar Regular Expression
Apa Itu Regular Expression?
Regular Expression atau biasa disingkat regex, adalah suatu metode untuk mengenali atau mendeteksi suatu pola tertentu pada suatu string.
Dengan menggunakan regex, kita bisa mendeteksi pola string seperti email, hashtag, link dan pola-pola kompleks lainnya dengan hanya satu ekpresi saja.
Ia juga merupakan metode standar dan independen, tidak mengenal bahasa pemrograman. Kita bisa mengimplementasi regex di berbagai macam bahasa pemrograman: termasuk PHP.
Kapan Harus Menggunakan Regular Expression?
Jika anda hanya butuh mendeteksi suatu kata statis dalam suatu string, jangan gunakan regex!
Tapi jika anda butuh untuk mendeteksi suatu pola yang dinamis dalam suatu string, maka anda tidak punya pilihan yang lebih baik dari pada regex.
Misalkan anda memiliki teks seperti ini:
*Kabarkan* kepada semua mahasiswa bahwa besok *kelas pemrograman web diliburkan*
Lalu anda ingin mencetak tebal semua karakter yang diapit dengan tanda bintang (**
), sehingga teks di atas berubah menjadi seperti ini:
Kabarkan kepada semua mahasiswa bahwa besok kelas pemrograman web diliburkan
Maka cara terbaik untuk melakukan hal tersebut adalah: memanfaatkan regex.
Beberapa Fungsi Regular Expression Pada PHP
Di dalam PHP, terdapat beberapa fungsi yang berkaitan dengan penggunaan regex. Di antaranya:
Fungsi | Deskripsi |
---|---|
preg_match() | Mencari kata/karakter yang sesuai dengan pola regex. |
preg_match_all() | Mencari semua kata/karakter yang sesuai dengan pola regex. |
preg_replace() | Mencari kata/karakter yang sesuai dengan pola regex, lalu menimpanya dengan data baru. |
preg_grep() | Mengembalikan kata/karakter yang sesuai dengan pola regex. |
preg_split() | Membagi string menjadi sebuah array menggunakan pola regex. |
Beberapa Meta Karakter Regex
Terdapat banyak sekali meta karakter atau pola dalam regex. Akan tetapi, di bawah ini adalah yang mungkin paling sering anda gunakan.
Karakter | Deskripsi |
---|---|
\s | karakter putih (spasi, tab, baris baru) |
\d | angka digit (0-9) |
\w | karkater huruf (a-z, A-Z, 0-9, _) |
[aeiou] | pola yang terdiri dari set karakter di dalam kurung siku |
[^aeiou] | pola yang tidak terdiri dari set karakter di dalam kurung siku |
`(foo | bar |
Agar lebih mudah memahami regex, kita akan coba langsung mempraktikkannya. Kasus yang akan kita buat adalah:
- Deteksi #hashtag
- Deteksi @username
- Deteksi Email
- Dan Deteksi Kode Spesial Whatsapp
Langsung saja buka teks editor kalian, lalu buat 4 buah file sebagai berikut:
src/
├── fungsi
│ ├── deteksi-email.php
│ ├── deteksi-hashtag.php
│ ├── deteksi-kode-spesial-whatsapp.php
│ └── deteksi-username.php
└── index.php
Pada file index.php
, require semua file yang berada pada direktori fungsi/
.
<?php
require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';
Oke, setelah itu kita akan mulai dari setiap kasus.
1. Deteksi #hashtag
Kasus yang pertama adalah mendeteksi setiap kata yang diawali tanda pagar alias hashtag. Setelah berhasil mendeteksi, kita akan mereplace setiap hashtag menjadi link ke twitter.com.
Untuk mendeteksi pola hashtag, kita akan gunakan fungsi preg_match_all()
yang akan mengembalikan semua teks yang sesuai dengan pola.
Buka file index.php
. Lalu tambahkan kode berikut:
<?php
$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona
yang akhir-akhir ini mulai menyebar.";
echo deteksiHashtag($teks1);
Pada file fungsi/detekksi-hashtag.php
, buat fungsi deteksiHashtag()
. Lalu kita coba untuk mendeteksi semua tanda #
yang ada (sementara tanda pagarnya saja dulu)
<?php
function deteksiHashtag($input)
{
$regex = "/#/";
$hasil = [];
preg_match_all($regex, $input, $hasil);
# kembalikan data dalam bentuk json
return json_encode($hasil);
}
Jika skrip index.php
dijalankan, ia akan menghasilkan output sebagai berikut:
[["#","#"]]
Penjelasan:
- Pola yang kita definisikan adalah
/#
- Pola tersebut hanya akan mencari tanda # yang ada pada variabel
$input
- Hasil kembaliannya, kita mendapatkan ada dua tanda pagar yang dikembalikan
Oke, sekarang kita akan kembangkan polanya menjadi sedikit lebih rumit. Kita akan memanfaatkan tanda kurung siku untuk menentukan set karakter pola untuk mendeteksi hashtag. Silakan lihat kembali ke tabel 2 untuk melihat deskripsi meta karakter yang ada.
Pada file fungsi/deteksi-hashtag.php
, ubah variabel $regex
menjadi seperti ini:
<?php
$regex = "/#[a-z]/";
Lalu jalankan lagi file index.php
, kita akan mendapatkan output seperti berikut:
[["#v","#k"]]
Penjelasan:
- di dalam variabel
$regex
, kita mendefinisikan pola yang berisi 2 karakter. - karakter pertama adalah tanda pagar
- dan karakter kedua adalah set huruf dari a sampai z
- sehingga hasil yang kita dapatkan adalah
#v
dan#k
.
Pertanyaan: lalu bagaimana untuk mendeteksi semua karakter dalam satu kata yang ada?
Jawabannya adalah: dengan menambahkan tanda +
setelah kurung siku!
Ubah variabel $regex
menjadi seperti ini:
<?php
$regex = "/#[a-z]+/";
Lalu jalankan lagi aplikasi, dan sekarang kita berhasil mendapatkan output yang kita inginkan:
[["#virus","#corona"]]
Agar kita bisa mendeteksi hashtag yang juga berisi angka, huruf kapital serta underscore. Kita harus mengubah variabel $regex
seperti berikut:
<?php
$regex = "/#[a-zA-Z0-9_]+/";
Oiya, satu lagi. Kita ingin hanya mendapatkan kata virus saja bukan #virus, begitu juga kata korona saja bukan #korona. Maka kita bisa memberikan tanda kurung untuk memisahkan satu elemen tertentu dari suatu pola regex.
Ubah variabel $regex
menjadi seperti berikut:
<?php
$regex = "/#([a-zA-Z0-9_]+)/";
Jika kita eksekusi, kita akan mendapatkan output seperti berikut:
[["#virus","#corona"],["virus","corona"]]
Anda bisa perhatikan dari output di atas bahwa kita memiliki array dengan 2 item, di mana item pertama berisi pola secara lengkap. Dan item ke-2 berisi pola yang diapit oleh tanda kurung saja (tanpa tanda pagar).
Langkah selanjutnya, kita akan menggunakan fungsi preg_replace()
untuk menimpa semua hashtag dengan sebuah link yang mengarah ke twitter.
Ubah fungsi deteksiHashtag()
menjadi seperti berikut:
<?php
function deteksiHashtag($input)
{
$regex = "/#([a-zA-Z0-9_]+)/";
$timpa = "<a href='https://twitter.com/hashtag/$1'>$0</a>";
return preg_replace($regex, $timpa, $input);
}
Perhatikan baris yang saya highlight di atas:
$1
menandakan pola yang diapit oleh tanda kurung- sedangkan
$0
menandakan pola secara keseluruhan - jika ada tanda kurung yang lain, maka anda bisa menggunakan variabel
$2
untuk menampilkannya
Jika program saya eksekusi kembali, saya mendapatkan output seperti berikut:
Dihimbau agar seluruh masyarakat waspada akan #virus #corona yang akhir-akhir ini mulai menyebar.
2. Deteksi @username
Setelah mencoba langkah-langkah yang cukup detil pada contoh kasus pertama, saya rasa untuk kasus kedua tidak terlalu susah. Karena kita hanya perlu mengganti tanda #
di atas menjadi tanda @
. Lalu mengganti url twitter menjadi "https://twitter.com/$1"
.
Langsung saja.
Buka file fungsi/deteksi-username.php
. Lalu tambahkan fungsi bernama deteksiUsername()
sebagaimana berikut:
<?php
function deteksiUsername($input)
{
$regex = "/@([a-zA-Z0-9_]+)/";
$timpa = "<a href='https://twitter.com/$1'>$0</a>";
return preg_replace($regex, $timpa, $input);
}
Lalu pada file index.php
, kita bisa menambahkan teks baru seperti berikut:
<?php
$teks2 = "Pak @jokowi telah menyampaikan #pidato yang berisi
#himbauan kepada masyarakat untuk tidak banyak
beraktifitas di luar rumah demi mencegah
tersebarnya #virus #korona.";
echo deteksiUsername(
deteksiHashtag($teks2)
);
Ketika saya eksekusi, ini adalah output yang saya dapatkan:
Pak @jokowi telah menyampaikan #pidato yang berisi #himbauan kepada masyarakat untuk tidak banyak beraktifitas di luar rumah demi mencegah tersebarnya #virus #korona.
3. Deteksi Email
Untuk mendeteksi email, kita bisa melakukannya dengan 3 pola bagian:
- pola pertama adalah username email (sebelum tanda @). Pola ini adalah semua karakter dalam set
[a-zA-Z0-9_]
atau kita bisa singkat dengan menggunakan meta karakter\w
. - pola yang kedua adalah tanda
@
. - pola yang ketiga adalah domain. Domain terdiri dari dari karakter huruf kecil dan titik (
[a-z.]+
)
Sehingga ketika 3 pola di atas kita rangkai, kita mendapatkan pola sebagai berikut:
<?php
$regex = "/[\w]+@[a-z.]+/";
Langsung saja. Silakan buka file fungsi/deteksi-email.php
lalu buat fungsi deteksiEmail
sebagai berikut:
<?php
function deteksiEmail($input)
{
$regex = "/[\w]+@[a-z.]+/";
$timpa = "<a href='mailto:$0'>$0</a>";
return preg_replace($regex, $timpa, $input);
}
Lalu pada file index.php
, kita bisa tambahkan teks baru sebagai berikut:
<?php
$tesk3 = "Untuk informasi lebih lanjut tentang pendidikan di Surabaya,
anda bisa mengirimkan surel ke alamat dispendik@surabaya.go.id";
echo deteksiEmail($tesk3);
Maka setelah dijalankan, output yang kita dapatkan adalah sebagai berikut:
Untuk informasi lebih lanjut tentang pendidikan di Surabaya, anda bisa mengirimkan surel ke alamat dispendik@surabaya.go.id
4. Deteksi Kode Spesial Whatsapp
Kita telah mencoba 3 contoh kasus. Ketiga contoh tersebut terbilang sederhana karena ketiganya hanya menerapkan satu pola dan satu timpaan.
Sedangkan pada kasus ini, kita akan mencoba 3 pola sekaligus dalam satu kali pemanggilan fungsi preg_replace
.
Selain menerima parameter string, fungsi preg_replace
juga bisa menerima parameter berupa array yang berisi kumpulan lebih dari satu pola.
3 pola yang akan kita buat adalah sebagai berikut:
- Double underscore (
__
): untuk mencetak miring. - Double bintang (
**
): untuk mencetak teks tebal. - Double gelombang (
~~
): untuk mencetak teks tercoret.
Langsung saja.
Buka file fungsi/deteksi-kode-spesial-whatsapp.php
dan buat fungsi dengan nama deteksiKodeSpesialWA()
lalu tuliskan kode program seperti berikut:
<?php
function deteksiKodeSpesialWA($input)
{
$regex = [
"/_([\w\s]+)_/",
"/\*([\w\s]+)\*/",
"/\~([\w\s]+)\~/"
];
$timpa = [
"<i>$1</i>",
"<strong>$1</strong>",
"<strike>$1</strike>"
];
return preg_replace($regex, $timpa, $input);
}
Penjelasan:
- variabel
$regex
dan$timpa
berupa array yang berisi 3 buah item. - pola pertama dari array
$regex
akan ditimpa oleh string pertama dari array$timpa
, dan begitu seterusnya. - meta karakter
\w
pada setiap pola di atas berarti[a-zA-Z0-9_]
. - dan meta karakter
\s
berarti karakter putih: yaitu spasi, tab, dan ganti baris. - kita menggunakan karakter putih karena bisa jadi yang diapit oleh tanda underscore/bintang/gelombang adalah kumpulan beberapa kata yang dipisahkan dengan spasi.
Setelah beres dengan fungsi deteksiKodeSpesialWA()
. Sekarang kita ubah file index.php
, tambahkan kode program berikut:
<?php
$teks4 = "_Bismillahirrahmanirrahim_.. Mohon maaf, sepertinya besok
saya *tidak bisa hadir* ke kampus karena ~malas~ ada suatu
kepentingan.";
echo deteksiKodeSpesialWA($teks4);
Bismillahirrahmanirrahim.. Mohon maaf, sepertinya besok saya tidak bisa hadir ke kampus karena
malasada suatu kepentingan.
Kode Sumber Lengkap
Kode sumber lengkap untuk tutorial ini dan seri tutorial PHP tingkat menengah lainnya bisa anda dapatkan di repositori github di sini.
Kesimpulan
Regex adalah suatu metode/pendekatan untuk mendeteksi suatu pola dari suatu string. Dengan memanfaatkan regex, kita bisa memeriksa berbagai macam pola teks yang rumit hanya dalam satu ekspresi saja.
Di dalama tutorial ini, kita telah mencoba 4 contoh kasus untuk memahami lebih jauh bagaimana cara bekerja dengan regex pada PHP.