Ben duruk sınıf yöntemleri bir dizi var. Ben de bir nesne değişkeni $ DB saklanan bir komut varolan bir veritabanı bağlantısı var. Nasıl bu statik sınıf yöntemleri onları sınıf yönteminin bir parametre olarak onları her zaman bu değişken geçmek zorunda kalmadan $ DB nesnesi kullanmasına izin ve diyorsunuz?
Örneğin, şu anda küresel bir, maalesef kullanmak için yaşıyorum:
class Foo {
public static function Bar() {
global $DB;
return $DB->DSN_STRING;
}
}
Ben bir şekilde yeniden kurmak o gerek kalmadan $ DB bağlantı alır bir rutin ile kendisini aramak için benim statik sınıf gerekir gibi. Bu örneği değil çünkü statik sınıf içine enjekte edemez.
Ben normal bir sınıfa statik sınıf geçmek ve benim $ Foo nesnesi örneğini Tabii ki sorun çözüldü. Ben daha sonra bir kamu değişken üzerinde bir ayarı olarak $ DB VAR enjekte edebilir. Ya $ DB VAR almak ve daha sonra $ Foo nesnesinin bir private var ayarlamak için genel bir yöntem ekleyin. Ya da, bir sınıf yapıcı $ DB VAR kabul ve $ Foo nesnesinin bir private var set yapın. Ama bütün 3 teknikleri Ben normal bir sınıfa statik sınıftan geçiş gerektirir.
Bazı insanlar bir Registry desen veya bir Singleton deseni (ben aynı şey mi? Emin değilim) diye bahsettiğimiz şey var. Bu ben verimli bu sorunu çözmek için gereken nedir?
En önemlisi şey insanların bu konuda kafayı çünkü "global $ DB" arama önlemek olmasıdır.