Geçerli yaklaşım oldukça standart ve iyi çalışıyor. Ben uzun bir süre için kullanılır. Bu da çok güzel ve ev demlemek koduyla sorunlardan uzak alabilirsiniz, hangi PDO'de gibi modüller artık bu gibi baz işlevselliği sağlamak doğrudur.
Ancak, ben bir adım daha ileri bağlantı yönetimini aldım. Karmaşık bir uygulama içine alırsanız, size birden fazla veritabanı, ya da ağır veritabanı kullanımı var bir durum içine alabilirsiniz. Tek bir veritabanı bağlantısı dosyası da dahil olmak üzere küresel bir $database
değişken çoklu veritabanları için ağır olur, ve might not need, bir veritabanı bağlantısı uygulama istekleri için gereksiz sahip. Veritabanına bağlanırken pahalı olduğunu unutmayın.
Ne yaptık, benim için veritabanı nesnesini işleyen bir tek DatabaseManager sınıf oluşturmak ve belirli bir DB emin birden fazla bağlantı örneği alamadım yapar. Bunun yerine app üstünde yeni bir veritabanı nesnesi başlatılırken, sadece DatabaseManager üzerinde nesneyi gerekir her zaman diyoruz.
$db = DatabaseManager::getDatabase();
Burada bir CodeIgniter proje için çırpılmış bir örnek sınıf bulunuyor. Eğer CI kullanarak olmasaydı sadece kendi sınıf için yerine (ve bunun için bağlantı rutin çalıştırın) olacağını CodeIgniter'ın varsayılan veritabanı nesnesini yükler getDatabase()
fonksiyonu görebilirsiniz. Bu oldukça basit bir yönetim sınıfı ve oldukça kolay farklı veritabanları için birden çok bağlantı yönetmek için uzun olabilir.
<?php
/**
* Implements the Singleton pattern to prevent multiple instantiations and connections
* to the application database.
*
*/
class Database_manager
{
private static $instance;
public $db;
/**
* Constructor function is declared private to prevent instantiation.
*
*/
protected function __construct()
{
parent::__construct();
}
/**
* Returns an instance of a Database_manager.
*
* @return object Database_manager object
*/
public static function getInstance()
{
if (self::$instance == null) {
$className = __CLASS__;
self::$instance = new $className();
}
return self::$instance;
}
public static function getDatabase()
{
$instance = self::getInstance();
if ($instance->db == null) {
//utilize CodeIgniter's database loader
$instance->db = $instance->load->database('',true);
if (! is_object($instance->db)) throw new Exception("Could not load database.");
}
return $instance->db;
}
}
Ben veritabanı bakım için bir uygulama aşağı çekmek zorunda Belki bağlantısı yönetimi bu tarzı kullanarak çıkmak en yaygın avantajdır. Ben kadar ihtiyacımız bir veritabanı bağlantısı başlatmasını tarafından değil, ben kolayca bir sitede mesajın bir "ilerleme içinde bakım" (kısa devre, normal MVC sevk) kadar koyabilirsiniz, ve bakım iken bir DB bağlantısı açmaya uygulama istekleri dert ilerleme.