Gol
Seperti yang saya lihat, tujuan Anda dalam hal ini ada dua:
- membuat dan memelihara koneksi tunggal/dapat digunakan kembali per database
- pastikan koneksi telah diatur dengan benar
Solusi
Saya akan merekomendasikan untuk menggunakan fungsi anonim dan pola pabrik untuk menangani koneksi PDO. Penggunaannya akan terlihat seperti ini :
$provider = function()
{
$instance = new PDO('mysql:......;charset=utf8', 'username', 'password');
$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
return $instance;
};
$factory = new StructureFactory( $provider );
Kemudian di file yang berbeda atau lebih rendah di file yang sama:
$something = $factory->create('Something');
$foobar = $factory->create('Foobar');
Pabrik itu sendiri akan terlihat seperti ini:
class StructureFactory
{
protected $provider = null;
protected $connection = null;
public function __construct( callable $provider )
{
$this->provider = $provider;
}
public function create( $name)
{
if ( $this->connection === null )
{
$this->connection = call_user_func( $this->provider );
}
return new $name( $this->connection );
}
}
Dengan cara ini Anda akan memiliki struktur terpusat, yang memastikan bahwa koneksi dibuat hanya jika diperlukan. Ini juga akan membuat proses pengujian dan pemeliharaan unit menjadi lebih mudah.
Penyedia dalam hal ini akan ditemukan di suatu tempat pada tahap bootstrap. Pendekatan ini juga akan memberikan lokasi yang jelas untuk menentukan konfigurasi, yang Anda gunakan untuk menghubungkan ke DB.
Ingatlah bahwa ini adalah contoh yang sangat disederhanakan . Anda juga mungkin mendapat manfaat dari menonton dua video berikut:
Juga, saya sangat menyarankan untuk membaca tutorial yang tepat tentang penggunaan PDO (ada log tutorial buruk online).