使用Foreach循环访问依赖项



我正在尝试制作一个简单的依赖项"mapper",我想我甚至不能称它为依赖项注入器。。。所以我试着在下面做一个最小限度的概念证明。

在我的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');

在我的简单容器里,我有这个。。。

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;
    }
}

我在一个单独的文件中映射了我的依赖项,如下所示。。。

/**
 * 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函数不仅仅是foreachifelse语句的永不结束的嵌套。。。我需要添加某种回调吗?我真的不清楚,,我必须强调,我已经尝试了很多不同的方法,但都不起作用,太多了

你做错了。您的容器设计为只能使用该依赖关系结构。例如,$container->get('B')将不工作,$container->get('C')也不工作,因为$c将为null,第三个嵌套的new将失败。

我建议您将容器制作为递归函数。

顺便说一句,第三个foreach是怎么回事?你想得到最后一个依赖吗?

你可以阅读我的文章。

相关内容

  • 没有找到相关文章

最新更新