Tüm sınıflar için erişilebilir PHP OOP :: tutarak yapılandırma 'küresel' değerleri

0 Cevap php

Ben herhangi bir bağımlılık nesneleri (Dependency Injection), örneğin nesnelerin örnekleme yönetmek için bir fabrika sınıfını kullanıyorum ve kurucular içine geçirerek

function createBasket() {
    //pass in dependent objects
    $apiCon = $this->createAPIConnector($this);
    $basket = new Basket($this, $apiCon);
    return $basket;
}

Ben, vb basit ve daha güçlü birim test, net kod izin, (Fabrika dışında) herhangi sınıfları içinde 'yeni' anahtar sözcüğünü kullanarak önlemek için çalışıyorum

Şimdi, benim sorum çok sınıfları örneğin gerektiren yapılandırma değerlerine ilişkindir

$apiURL = 'http://some.api.com';
$apiKey = 'abcde12345';
$adminEmail = 'someone@site.com';

Bu değerler her bir uygulama örneği için sabit kalır. Şu anda bir tek sınıfta yapılandırma onları var ve onlar takip ederek herhangi bir sınıf içinde ulaşılabilir:

$cfg = Config::getInstance();
$address = $cfg->apiURL;

Ancak, bu sınıf örneği hala onu çağırır herhangi Sınıf içinde bir bağımlılık olduğunu, bu yüzden örneğin, sınıf yapıcılar içine bu geçen düşünmek gerekir

function createBasket() {
    //pass in dependent objects
    $apiCon = $this->createAPIConnector($this);
    $cfg = Config::getInstance();
    //pass singleton config object to constructor
    $basket = new Basket($this, $apiCon, $cfg);
    return $basket;
}

... Ya da belki daha doğrusu yapıcısı aracılığıyla daha, bir dizi yöntemi ile onları geçmek:

function createBasket() {
    //pass in dependent objects
    $apiCon = $this->createAPIConnector($this);
    $basket = new Basket($this, $apiCon);
    //pass singleton config object to setter
    $basket.setConfig(Config::getInstance());
    return $basket;
}

Iyi yaklaşım Herhangi bir rehberlik çok takdir.

Teşekkürler, James

0 Cevap