PHP OOP devralmasını veritabanı bağlantısı

2 Cevap php

My abstract class Database database interaction için yapılan herhangi bir child Bu sınıfın (UserDatabase, ActionDatabase, EventDatabase) gibi tanımlanmıştır kendi database connection ki devralır olarak static.

abstract class Database {  
    public static $connection;   
    public function __construct( ) {      
        ...  
        $this->connection = mysql_connect( $host, $username, $password );      
    }  
}     
class UserDatabase extends Database {  
    public function verify( ) {
        if ( $this->connection == parent::$connection ) {
            print "true";  
        } else {  
            print "false";  
            print "this:" . $this->connection . " parent:" . parent::$connection;  
        }  
    }    
}  
$instance = new UserDatabase( );  
$instance->verify( );  
// this prints false, as parent::$connection is empty

Bu ortalama, benim veritabanı bağlantısı sadece her örneği için çoğaltılmış olmadan kurmak ve hafızada saklanan once ve referans olarak alt sınıflara aktarılır mı ki?

Bu size cepten-doğru bir veritabanı arayüzü uygulamak nasıl mı?

2 Cevap

Bir an için kodunuzu almamak ve bu düzeni nasıl çalışması gerektiğinin tanımını sadece bakarak ... Evet, veritabanı bağlantısı sadece her PHP script için bir kez kurmak olacağını ve her bir örnek için çoğaltılamaz olmaz.

Bu iyi bir fikir olup olmadığını sizin alt sınıfları ne bağlıdır. Her sınıf bir sorumluluğu olmalıdır. Sürece altsınıflarda 'sadece sorumluluk DB etkileşim olduğu gibi, muhtemelen iyiyiz. (Bu genellikle yapılır nasıl bir açıklama için depo desen bak.) Bu çizgiyi aştık ve çok bağımlılıkları ve sorumlulukları olacaktır sınıfları yazarken, kendini saklamak, böylece kullanıcı sınıfı Veritabanı taşarsa.

Kodunuz için gelince ... kodunuzu hemen hemen her satırı yanlıştır. Bir işlevin sonuçlarına sınıf değişkenleri başlatılamıyor. SQL yanlış. Çizgi $connection ? "connected" : "not connected"; hiçbir şey yapmaz. Bunun neredeyse hiçbiri bir kurucu yapılmalıdır. Vb

Bu sınıfların ancak veritabanı etkileşimleri ile başka bir şey yapıyoruz eğer desen Tamam.

Aksi takdirde her zaman bu yapabilirsiniz "getInstance ()" bir kez oluşturulan bir veritabanı sınıfı ile daha iyi olabilir. Singleton Tasarım Deseni.

http://www.tonymarston.net/php-mysql/singleton.html