私は単純な依存関係を「マッパー」にしようとしていますが、私はそれを依存インジェクタと呼ぶこともできません...ので、以下の概念を最小限にしようとしました。私は私の依存関係が別々に出てマッピングされているForeachループを使用した依存関係へのアクセス
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;
}
}
私は、次のしている私のindex.phpページに
...私はこれを持っている私の単純なコンテナで// >>> 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');
...このようなファイル...
/**
* to add a dependency, write the full namespace
*/
$dependency['A'] = [
'B' // A depends on B
];
$dependency['B'] = [
'C' // which depends on C
];
そして、お互いに依存するクラスA、B、Cのセット...
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>';
}
}
私が動作するように何かを得るために、すべての午後を試してみましたが、私はどちらか、私はどのように作ることができ、私のget()
機能で非常に明確に十分
質問
を考えておりません怖いですこれらの依存関係を自動的にロードすることで、私のget関数は決して終わりではないforeachとifelseステートメント...何らかのコールバックを追加する必要がありますか?実際に私には明らかではない、と私は、私は非常にいくつかの異なるアプローチを試みてきたことを強調しなければならない。
なぜクラス構造を設定して、オートワイヤリングではなくどこかに保存しています([こちら] [こちら](http://stackoverflow.com/questions/38702676/what-is-a-dependency-injection-container/38706152# 38706152))。リフレクションクラスでautowiringすることで、PHPは配列/ファイルから読み込むのではなく、依存関係を自動的に検出することができます。 – jeremy