Menu Navigasi

Tutorial Tutorial Pemrograman Part 40: Implementasi Design Pattern Singleton di PHP

AI Generated
29 Desember 2025
13 views
Tutorial Tutorial Pemrograman Part 40: Implementasi Design Pattern Singleton di PHP

Pendahuluan

Selamat datang di Part 40 dari seri tutorial pemrograman PHP dari Zero to Hero! Pada bagian ini, kita akan membahas salah satu design pattern yang paling sering digunakan, yaitu Singleton. Singleton memastikan bahwa sebuah kelas hanya memiliki satu instance dan menyediakan titik akses global ke instance tersebut. Sebelum memulai, pastikan Anda sudah memahami konsep dasar OOP di PHP, termasuk kelas, objek, dan properti. Artikel sebelumnya membahas tentang 'Advanced Error Handling dengan Custom Exception di PHP', yang akan berguna dalam membangun aplikasi yang robust.

Konsep Dasar

Bayangkan Anda memiliki sebuah remote control untuk televisi. Anda tidak ingin memiliki banyak remote control yang berbeda untuk satu TV, bukan? Anda hanya ingin satu remote control yang berfungsi sebagai titik akses tunggal ke TV Anda. Inilah ide dasar dari Singleton pattern. Singleton pattern membatasi instantiation sebuah kelas ke satu objek saja. Kegunaannya antara lain:

  • Mengelola koneksi database tunggal
  • Konfigurasi aplikasi terpusat
  • Logging

Hands-on Coding

Mari kita buat implementasi Singleton sederhana di PHP.


class Singleton {
    private static $instance;
    private $data;

    // Private constructor untuk mencegah instantiation dari luar kelas
    private function __construct() {
        $this->data = [];
    }

    // Method static untuk mendapatkan instance Singleton
    public static function getInstance(): Singleton {
        if (self::$instance === null) {
            self::$instance = new Singleton();
        }
        return self::$instance;
    }

    // Mencegah cloning
    private function __clone() {}

    // Mencegah unserialization
    public function __wakeup() {
        throw new \Exception("Cannot unserialize singleton");
    }

    public function setData(string $key, $value): void {
        $this->data[$key] = $value;
    }

    public function getData(string $key) {
        return $this->data[$key] ?? null;
    }
}

// Penggunaan
$instance1 = Singleton::getInstance();
$instance2 = Singleton::getInstance();

$instance1->setData('nama', 'Budi');
echo $instance2->getData('nama'); // Output: Budi

var_dump($instance1 === $instance2); // Output: bool(true)

Penjelasan Kode:

  • private static $instance;: Variabel static untuk menyimpan instance Singleton.
  • private function __construct() { ... }: Constructor dibuat private untuk mencegah pembuatan objek langsung dari luar kelas.
  • public static function getInstance(): Singleton { ... }: Method static untuk mendapatkan atau membuat instance Singleton. Jika instance belum ada, instance baru akan dibuat.
  • private function __clone() {}: Mencegah cloning objek Singleton.
  • public function __wakeup() { ... }: Mencegah unserialization objek Singleton.
  • setData() dan getData(): Contoh method untuk menyimpan dan mengambil data.

Common Pittfalls

  • Tidak membuat constructor private: Hal ini memungkinkan pembuatan objek Singleton dari luar kelas, yang melanggar prinsip Singleton.
  • Lupa mencegah cloning dan unserialization: Hal ini dapat menyebabkan multiple instance, dan menghilangkan manfaat Singleton.
  • Overuse: Menggunakan Singleton untuk setiap kelas, padahal tidak semua kelas memerlukan instance tunggal.

Challenge

Coba modifikasi kode Singleton di atas untuk menyimpan koneksi database (menggunakan PDO) dan memastikan hanya ada satu koneksi database yang digunakan di seluruh aplikasi Anda.

Sumber Referensi

Bagikan: