Membuat Koneksi Database Singleton di PHP

By Rizky Kurniawan - March 7, 2022 ~4 mins read

Halo, selamat datang kembali di Ruang Developer Blog. Kali ini kita akan belajar untuk membuat koneksi database singleton di PHP. Sebelum praktek, kita akan bahas dulu apa itu singleton dan kenapa kita menggunakan singleton.

Kita selalu terbiasa belajar membuat aplikasi berbasis PHP dengan studi kasus pengolahan data. Studi kasus ini sangat cocok untuk memahami logika pemrogramman. Selain itu, kita juga dapat belajar bagaimana cara berinteraksi dengan data yang ada pada database. Kita membuat koneksi database menggunakan sebuah file yang biasa dinamai dengan koneksi.php, database.php, dan lain-lain. Isi filenya kurang lebih akan terlihat seperti ini.

<?php

$servername = "localhost";
$username = "root";
$password = "";

$koneksi = mysqli_connect($servername, $username, $password);

if (!$conn) {
    die("Koneksi Gagal: " . mysqli_connect_error());
}

Atau bisa juga seperti ini

<?php
$servername = "localhost";
$username = "root";
$password = "";

try {
    $koneksi = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
    $koneksi->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "Koneksi database gagal: " . $e->getMessage();
}

Kemudian pada suatu file yang membutuhkan koneksi database kita akan menuliskannya seperi ini

<?php

require_once "./database.php";

$statement = $koneksi->prepare("SELECT name, email FROM users");
$statement->execute();
$user = $statement->fetchAll();

// Kode lainnya

Lalu apa yang salah dengan cara di atas? Tidak ada yang salah sebenarnya. Kode di atas akan baik-baik saja apabila dijalankan. Kita akan selalu menyertakan file database.php pada setiap halaman yang memerlukan koneksi database. Oleh karena itu, instansiasi PDO pada file database.php akan selalu dilakukan saat halaman di load sehingga akan terlalu banyak objek database pada aplikasi kita.

Seharusnya, objek yang sama hanya dibuat satu kali saja. di sinilah kita menggunakan singleton. Dalam konsep pemrogramman berbasis objek, singleton adalah sebuah kelas yang hanya memiliki satu objek pada satu waktu yang dibuat saat pertama kali dipanggil. Pemanggilan berikutnya akan merujuk ke satu objek yang pertama. Jadi, modifikasi apa pun yang kita lakukan pada variabel apa pun di dalam kelas melalui instance apa pun, memengaruhi variabel instance tunggal yang dibuat dan terlihat jika kita mengakses variabel itu melalui variabel apa pun dari tipe kelas yang ditentukan.

Pada bahasa pemrogramman PHP konsep singleton ini sebenarnya tidak bersifat wajib karena php biasanya dijalankan dengan thread-safe. Namun tidak ada salahnya untuk kita pelajari. Oke langsung saja kita praktekan ya.

Membuat Koneksi Singleton

Kita akan membuat kelas singleton dengan cara membuat sebuah kelas baru dengan satu atribut private untuk menampung objek dan mengubah method constructor menjadi private. Setelah itu, kita akan buat satu method static yang akan mengembalikan instance dari kelas ini sendiri. Untuk lebih jelasnya perhatikan kode berikut ini.

<?php
class Database
{
    private static ?\PDO $pdo = null;

    private function __construct()
    {
        //
    }

    public static function getConnection(): \PDO
    {
        $servername = "localhost";
        $username = "root";
        $password = "";

        if (self::$pdo == null) {
            self::$pdo = new \PDO("mysql:host=$servername;dbname=myDB", $username, $password);
        }

        return self::$pdo;
    }
}

Perhatikan static method getConnection(), pada method tersebut kita cek terlebih dahulu apakah variable $pdo null atau tidak. Jika variable $pdo null maka akan dilakukan instansiasi objek PDO kemudian mengisi variabel $pdo dengan objek PDO yang telah dibuat, dan yang terakhir adalah mengembalikan objek PDO.

Menggunakan Kelas Singleton

Untuk menggunakan kelas singleton kita hanya perlu menyertakan file database kita kemudian panggil static method yang telah kita buat. Untuk lebih jelasnya perhatikan kode berikut ini

<?php
require_once "./database.php";

// Mendapatkan instance database
$koneksi = Database::getConnection();

// Menggunakan instance database seperti biasa
$statement = $koneksi->prepare("SELECT name, email FROM users");
$statement->execute();
$user = $statement->fetchAll();

// kode lainnya...

Kita menggunakan database seperti biasa, yang membedakan hanyalah cara kita mengambil koneksi database. Kalau sebelumnya kita langsung mengakses variabel yang ada pada file database.php, sekarang kita mengambil koneksi menggunakan method getConnection() yang ada pada kelas singleton database kita.

Sekarang kita sudah menggunakan singleton untuk koneksi database kita. Beberapa framework seperti laravel menggunakan konsep singleton. Oleh karena itu kita juga perlu memahami konsep ini.

Terima kasih sudah membaca tulisan ini, apabila ada kesalahan yang teman-teman temukan jangan sungkan untuk meninggalkan komentar di sini dan jangan lupa baca juga CRUD Sederhana Menggunakan PHP Dan MySQL.

Bagikan:

Ingin Berdiskusi?

Yuk bergabung di Grup Telegram Ruang Developer atau mulai diskusi melalui GitHub. See You!

Dapatkan contoh source code project backend, frontend, atau fullstack untuk kamu amati, tiru, dan modifikasi sesuka hati. Klik untuk melihat detail!
comments powered by Disqus

Berlangganan Gratis

Kamu akan menerima email update dari Ruang Developer

Beri Dukungan

Beri dukungan, dapatkan full source code project web untuk bahan referensi, tiru, dan modifikasi.
Lightbox