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.
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:
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:
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.