Özdevinimli_yükle veritabanı sınıfı

2 Cevap php
  • Ben İsimler içinde bir Db nesnesi örneğini önleyebilirsiniz bunu zaten erişmek için itiraz?
  • Bunun için özdevinimli_yükle işi __ misiniz?
  • Başka bir akıllı çözüm var mı?

Ben sınıfları (Onlar kavramsal yüzden idam eğer onlar işe yaramaz) şu var:

Db {
    function connect($config) {
    	// connect to data base
    }
    function query($query) {
    	// Process a query
    }
}
Names {
    function show_names($query) {
    	$Db = new Db(); // Is it possible to autoload this object?
    	$Db->query(query);
    	// Print data
    }
}

2 Cevap

Sınıflar özdevinimli olabilir, ancak nesneler örneği gerekir. Bu sorun daha gevşek bağlanmış bu iki sınıfları yapmaya çalışıyor gibi görünüyor. Muhtemelen bu sorunun basit çözüm Singleton tasarım deseni kullanıyor. Eğer 1'den fazla veritabanı bağlantısı için karar verebilir Ancak, bu en iyi çözüm değildir, ve aynı zamanda birim test sorunlu olur. Henüz çok daha esnek, daha karmaşık Dependency Injection kavramı, bir göz alarak öneririz.

Genellikle veritabanı bağlantı ile ilgili sınıfları için kullanılan bir solüsyon ile çalışmak için olan Singleton Design Pattern (example of implementation in PHP).

Bu DB bağlantısını taşırken, bir sınıf olmasını sağlar, ve PHP script ömrü boyunca açılmış tek bir bağlantı var sağlayacaktır - daha asla.

Bu, bu gibi bazı sözdizimi kullanmanızı sağlayacak:

$db = Db::getInstance();
$db->query('...');

Veya:

Db::getInstance()->query('...');


About autoload : it will work, as long as : there is a way for it to map the class' name to a file.