Menggunakan singletons
di PHP dianggap praktik yang buruk. Dari pengalaman saya, masalah yang paling bermasalah dengan mereka adalah tes unit. Sulit untuk memastikan bahwa dua tes independen saat menguji lajang.
Saya akan mendelegasikan tanggung jawab untuk batasan "hanya satu contoh yang harus ada" ke kode yang membuat objek Db.
Juga bagi saya sepertinya ada kesalahpahaman dalam cara kerja Lajang di PHP berbeda dengan bahasa lain:Jika Anda memiliki 10.000 permintaan bersamaan misalnya, maka setiap permintaan berjalan dalam proses atau utas PHP yang terpisah, yang berarti mereka semua akan memiliki sendiri contoh "lajang", tidak ada pembagian objek ini untuk lebih dari satu permintaan (saat menjalankan PHP dalam skenario backend web umum)
Tidak ada "pengumpulan koneksi" di PHP, tetapi Anda dapat menggunakan mysqli
koneksi persisten untuk mysql. Ini dapat dicapai dengan melewatkan p:
di depan nama host saat membuat mysqli. Ini mungkin membantu di sini, tetapi tangani dengan hati-hati (artinya baca dokumentasi terlebih dahulu )
Namun, hanya untuk teori, singleton di PHP harus menyadari fakta bahwa seseorang dapat menggunakan clone
. Artinya dalam kasus Anda adalah mungkin untuk melakukan itu:
$db = DB::getInstance();
$db2 = clone $db;
Untuk menghindarinya, Anda dapat mengimplementasikan __clone()
caranya seperti ini:
public function __clone() {
throw new Exception("Can't clone a singleton");
}