BAB 8.2B-2B – STRICT TYPES DAN BEST PRACTICE FUNCTION PHP MODERN
Tujuan Pembelajaran
Setelah mempelajari bab ini, peserta didik mampu:
- Memahami konsep Strict Types.
- Mengetahui perbedaan mode normal dan mode ketat.
- Mengenal TypeError.
- Menggunakan Mixed Type jika diperlukan.
- Menulis function sesuai standar industri.
- Membuat function yang mudah dipelihara dan dikembangkan.
Pendahuluan
Pada bab sebelumnya kita sudah mengenal Type Declaration.
Contoh:
function tambah(int $a, int $b): int
{
return $a + $b;
}
Namun PHP memiliki dua cara dalam menangani tipe data, yaitu:
- Weak Typing (Mode Normal)
- Strict Typing (Mode Ketat)
Memahami perbedaan keduanya sangat penting karena hampir semua framework PHP modern memanfaatkan fitur ini.
Weak Typing (Mode Normal)
Secara default PHP menggunakan Weak Typing.
Contoh:
<?php
function tambah(int $a, int $b): int
{
return $a + $b;
}
echo tambah("10", "20");
?>
Output:
30
Mengapa bisa?
Karena PHP otomatis mengubah string "10" menjadi integer 10.
Proses ini disebut Type Coercion (konversi tipe data secara otomatis).
Kelebihan Weak Typing
- Mudah digunakan.
- Cocok untuk pemula.
- Banyak kode PHP lama masih menggunakan mode ini.
Kekurangan Weak Typing
- Kesalahan lebih sulit dideteksi.
- Bug dapat muncul saat aplikasi sudah berjalan.
- Terkadang menghasilkan perilaku yang tidak diharapkan.
Contoh:
echo tambah("Sepuluh", 20);
Hasilnya tidak sesuai harapan karena "Sepuluh" bukan angka yang valid.
Strict Types
Untuk mencegah konversi otomatis, PHP menyediakan Strict Types.
Aktifkan dengan menambahkan deklarasi berikut pada baris pertama file PHP:
<?php
declare(strict_types=1);
Contoh lengkap:
<?php
declare(strict_types=1);
function tambah(int $a, int $b): int
{
return $a + $b;
}
echo tambah(10, 20);
Program akan berjalan normal.
Apa yang Terjadi Jika Tipe Data Salah?
<?php
declare(strict_types=1);
function tambah(int $a, int $b): int
{
return $a + $b;
}
echo tambah("10", "20");
Hasil:
Fatal error:
TypeError
Inilah tujuan Strict Types.
Program langsung memberi tahu bahwa tipe data yang diberikan tidak sesuai.
Kapan Menggunakan Strict Types?
Gunakan declare(strict_types=1); ketika:
- Membangun aplikasi baru.
- Mengembangkan API.
- Menggunakan Laravel atau framework modern.
- Membuat aplikasi yang memerlukan validasi tipe data yang ketat.
- Bekerja dalam tim agar kontrak fungsi lebih jelas.
Untuk proyek PHP lama (legacy project), penerapan strict_types perlu dilakukan secara bertahap karena dapat memunculkan kesalahan pada kode yang sebelumnya mengandalkan konversi otomatis.
Mengenal TypeError
Saat menggunakan Strict Types, kesalahan tipe data akan menghasilkan TypeError.
Contoh:
<?php
declare(strict_types=1);
function umur(int $u)
{
return $u;
}
echo umur("17");
Hasil:
TypeError
Artinya:
Parameter yang diterima tidak sesuai dengan yang diminta oleh function.
Mixed Type
PHP 8 memperkenalkan tipe data:
mixed
Artinya parameter dapat menerima berbagai tipe data.
Contoh:
function tampilkan(mixed $data): mixed
{
return $data;
}
echo tampilkan("PHP");
echo "<br>";
echo tampilkan(100);
Output:
PHP
100
Kapan Menggunakan mixed?
Gunakan hanya jika function memang dirancang menerima berbagai jenis data, misalnya:
- Utility helper.
- Library umum.
- Formatter.
- Logger.
Untuk aplikasi bisnis sehari-hari, lebih baik gunakan tipe data yang spesifik (int, string, float, dan sebagainya) agar kode lebih jelas.
Standar Penulisan Function di Dunia Industri
Contoh function yang baik:
<?php
declare(strict_types=1);
function hitungDiskon(
float $harga,
float $persen
): float
{
return $harga * ($persen / 100);
}
Keunggulan:
- Nama function jelas.
- Nama parameter mudah dipahami.
- Menggunakan Type Declaration.
- Menggunakan Return Type.
- Mudah diuji dan digunakan kembali.
Penamaan Function
Gunakan nama yang menggambarkan pekerjaannya.
Contoh:
hitungTotal()
cekLogin()
simpanDataSiswa()
Hindari:
x()
abc()
proses()
Satu Function, Satu Tanggung Jawab
Kurang baik:
function prosesSemua()
{
// login
// simpan data
// kirim email
// cetak laporan
}
Lebih baik:
function login()
{
}
function simpanData()
{
}
function kirimEmail()
{
}
function cetakLaporan()
{
}
Prinsip ini dikenal sebagai Single Responsibility Principle (SRP) dan merupakan salah satu prinsip dasar dalam pengembangan perangkat lunak modern.
Gunakan Return daripada Echo
Kurang baik:
function luas()
{
echo 100;
}
Lebih baik:
function luas(): int
{
return 100;
}
Dengan return, hasil function dapat digunakan kembali.
$hasil = luas();
echo $hasil * 2;
Hindari Variabel Global
Kurang baik:
$harga = 100000;
function diskon()
{
global $harga;
return $harga * 0.1;
}
Lebih baik:
function diskon(float $harga): float
{
return $harga * 0.1;
}
Cara ini membuat function lebih mudah diuji dan tidak bergantung pada keadaan di luar function.
Studi Kasus
Menghitung Total Belanja
<?php
declare(strict_types=1);
function hitungDiskon(float $harga): float
{
return $harga * 0.1;
}
function totalBayar(float $harga): float
{
return $harga - hitungDiskon($harga);
}
$harga = 500000;
echo "Harga Awal : Rp ".number_format($harga, 0, ",", ".")."<br>";
echo "Diskon : Rp ".number_format(hitungDiskon($harga), 0, ",", ".")."<br>";
echo "Total Bayar: Rp ".number_format(totalBayar($harga), 0, ",", ".");
?>
Output:
Harga Awal : Rp 500.000
Diskon : Rp 50.000
Total Bayar: Rp 450.000
Best Practice Dunia Industri
Sebelum menulis function, biasakan mengikuti daftar berikut:
- Gunakan nama function yang jelas.
- Gunakan Type Declaration untuk parameter.
- Gunakan Return Type Declaration.
- Aktifkan
declare(strict_types=1);pada proyek baru jika seluruh tim sepakat menggunakannya. - Hindari penggunaan variabel global jika dapat digantikan dengan parameter.
- Satu function hanya mengerjakan satu tugas.
- Gunakan
returnuntuk mengembalikan hasil, bukanecho, kecuali function memang bertugas menampilkan output.
Latihan Praktik
Latihan 1
Buat function:
function hitungPPN(float $harga): float
yang mengembalikan nilai PPN sebesar 11%.
Latihan 2
Buat function:
function cekKelulusan(int $nilai): string
yang mengembalikan "Lulus" jika nilai ≥ 75, selain itu "Remedial".
Latihan 3
Aktifkan declare(strict_types=1);, lalu coba panggil function dengan parameter yang salah. Amati pesan TypeError yang muncul dan jelaskan penyebabnya.
Tugas Praktik
Mini Project – Sistem Penjualan Sederhana
Buat program yang terdiri atas function berikut:
hitungDiskon(float $harga): floathitungPPN(float $harga): floattotalBayar(float $harga): floatformatRupiah(float $nilai): string
Ketentuan:
- Aktifkan
declare(strict_types=1);. - Semua function harus menggunakan Type Declaration dan Return Type.
- Hindari penggunaan variabel global.
- Tampilkan hasil dalam tabel HTML dengan kolom:
- Nama Produk
- Harga
- Diskon
- PPN
- Total Bayar
