Ich versuche, eine einfache Abhängigkeit "Mapper" zu machen, ich glaube nicht, dass ich es sogar einen Abhängigkeitsinjektor nennen kann ... also habe ich versucht, einen minimalen Beweis des Konzepts unten zu machen.Zugreifen auf Abhängigkeiten mit einer Foreach-Schleife
auf meiner Seite index.php folgendes ich habe ...
// >>> psr-4 autoloader here
// instantiating the container
$container = new Container;
// getting an instance of 'A' with an object tree of A->B->C
$a = $container->get('A');
In meinem einfachen Behälter ich diese haben ...
class Container
{
public $dependencies = []; // an array of dependencies from the dependency file
public function __construct()
{
// include list of dependencies
include 'Dependencies.php';
foreach ($dependency as $key => $value) {
$this->dependencies[$key] = $value; // e.g. dependency['A'] = ['B'];
}
}
/**
* gets the dependency to instantiate
*/
public function get($string)
{
if (isset($this->dependencies[$string])) {
$a = $string;
foreach ($this->dependencies[$string] as $dependency) {
$b = $dependency;
if (isset($this->dependencies[$dependency])) {
foreach ($this->dependencies[$dependency] as $dependency);
$c = $dependency;
}
}
}
$instance = new $a(new $b(new $c));
return $instance;
}
}
Ich habe meine Abhängigkeiten in einem separaten vorgezeichnet Datei, die wie folgt aussieht ...
/**
* to add a dependency, write the full namespace
*/
$dependency['A'] = [
'B' // A depends on B
];
$dependency['B'] = [
'C' // which depends on C
];
und eine Reihe von Klassen, A, B und C, die hängen von ihnen ...
class A
{
public function __construct(B $b)
{
echo 'Hello, I am A! <br>';
}
}
class B
{
public function __construct(C $c)
{
echo 'Hello, I am B!<br>';
}
}
class C
{
public function __construct()
{
echo 'Hello, I am C! <br>';
}
}
Ich habe den ganzen Nachmittag versucht, etwas zu bekommen, zu arbeiten, aber ich habe Angst, entweder ich nicht klar genug denke
Frage
Also in meinem get()
Funktion, wie kann ich machen Das Laden dieser Abhängigkeiten automatisch, so dass meine Funktion erhalten ist nicht nur ein nie endendes Nest von foreach und iffelse Anweisungen ... muss ich eine Art von Rückruf hinzufügen? Es ist wirklich nicht klar für mich, und ich muss betonen, dass ich eine ganze Reihe verschiedener Ansätze ausprobiert habe, die nicht funktionierten, zu viele, um sie einzubeziehen.
warum verwenden Sie Setklasse Strukturen und die irgendwo anstatt autowiring Speicher (wie vorgeschlagen [hier] (http://stackoverflow.com/questions/38702676/what-is-a-dependency-injection-container/38706152# 38706152)). autowiring mit Reflection-Klassen ermöglicht es PHP, Abhängigkeiten automatisch zu erkennen, anstatt sie aus einem Array/einer Datei auszulesen. – jeremy