Her bir sınıf veya site çapında veritabanı nesne?

4 Cevap php

İlk sorgu çalıştırdığınızda o veritabanına bir bağlantı açar böylece inşa edilmiş bir veritabanı sınıfı var. Böylece diğer sitenin kullanıcıları için kullanılan sınıfları, grupları ve her bir veritabanı nesnesi her oluşturmanız gerekir? Bu başka bir yerde dağıtmak için sınıflar kolaylaştırır; sadece veritabanı sınıf bağlıdır. Bu ancak her sınıfta kimlik koymak için bana ihtiyacınız olacak. Benim için daha az dağınık görünüyor başka yaklaşım, bir veritabanı nesnesi oluşturmak ve global bir değişkene tutmak. Bu, bu daha kolay hale yapılandırma için aynı anda aktif veritabanı bağlantıları azaltır; kimlik bilgilerini yalnızca bir kez ayarlanması gerekir.

Somewhere I global değişkenler kaçınılması gerektiğini duydum. Buna en iyi uygulama yaklaşım nedir?

4 Cevap

Onların yapıcısı bir veritabanı bağlantı nesnesi almak için diğer sınıfları alabilir. Bu şekilde onların kimlik bilgilerini bilmek zorunda değilsiniz.

Başka bir ortak yol veritabanı bağlantıları için singletons kullanmaktır. Esasen bu olsa hala bir global değişkendir, ancak tek bir yerde veritabanı nesne örneğinin kontrol edebilirsiniz anlamına gelmez.

Ben sadece bağlantı yönetimi şeyler ve hiçbir şey masa-spesifik içeren bir temel sınıf olur. Daha sonra oraya kimlik koyabilirsiniz.

Başka bir seçenek (tür kirli olan bir işlevi yerine onları hardcoding) kimlik bilgilerini depolamak için böyle bir temel sınıf statik bir değişken kullanıyor.

Yani BaseDBConnection::$username ve BaseDBConnection::$password kimlik bilgilerini içeren ve diğer DbConnection sınıflar BaseDBConnection türetmek ve başvurmak self::$username, vb

Eğer küresel veritabanı nesneleri kaçınmalısınız. Sizin veritabanı mümkün olduğunca geç açıldı ve mümkün olduğunca erken kapatılmalıdır.

Eğer dahili sınıf başına bir veritabanı nesnesini kullanmak gerekir ve gerektiğinde sadece / kapalı açılmalıdır.

Ben temelde sadece değişkenler olarak kimlik bilgilerini saklamak ve gerekli sınıf dosyalarının içinde bunu içerecek bir 'yapılandırma' dosyası yaratacak.

Bu şekilde herhangi bir kimlik değişiklikleri sadece 'yapılandırma' dosyasının değişmesini gerektirir.

EDIT:

Ben bu veritabanı Sınıfı yeni bir örneğini her Sınıfı örneği gerektiği anlamına gelir söylemeyi unutmuşum.