Ich benutze eine Factory-Klasse, um die Instanziierung von Objekten zu verwalten und in ihre Konstruktoren alle Abhängigkeitsobjekte (Dependency Injection) z.PHP OOP :: Halte Config 'globale' Werte für alle Klassen zugänglich
function createBasket() {
//pass in dependent objects
$apiCon = $this->createAPIConnector($this);
$basket = new Basket($this, $apiCon);
return $basket;
}
Ich versuche, das ‚neue‘ Schlüsselwort in allen Klassen (außer Factory) zu vermeiden, mit, einfachen und robusten Unit-Test zu ermöglichen, klaren Code usw.
Nun bezieht ich meine Frage Konfigurationswerte, die viele Klassen benötigen, z
$apiURL = 'http://some.api.com';
$apiKey = 'abcde12345';
$adminEmail = '[email protected]';
Diese Werte bleiben für jede Anwendungsinstanz konstant. Ich habe sie zur Zeit in einer Singletonklasse Config und sie sind erreichbar aus jeder Klasse durch die folgenden:
$cfg = Config::getInstance();
$address = $cfg->apiURL;
jedoch diese Klasse Instanz ist immer noch eine Abhängigkeit innerhalb einer Klasse, die es nennt, also soll ich darüber nachdenken, beiläufig dies in Klassenkonstruktoren, z
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;
}
... oder vielleicht sie über eine Set-Methode, anstatt über Konstruktor in:
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;
}
Alle Leitlinien für den besten Ansatz wäre sehr geschätzt.
Danke, James
* (verwandt) * [Symfony Komponenten Dependency Injection Container] (http://components.symfony-project.org/dependency-injection) – Gordon
Dependency Injection ist der Weg zu gehen – DrDol