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 return untuk mengembalikan hasil, bukan echo, 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): float
  • hitungPPN(float $harga): float
  • totalBayar(float $harga): float
  • formatRupiah(float $nilai): string

Ketentuan:

  1. Aktifkan declare(strict_types=1);.
  2. Semua function harus menggunakan Type Declaration dan Return Type.
  3. Hindari penggunaan variabel global.
  4. Tampilkan hasil dalam tabel HTML dengan kolom:
    • Nama Produk
    • Harga
    • Diskon
    • PPN
    • Total Bayar

Similar Posts

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *