持久化容器数据php

时间:2016-12-08 14:56:31

标签: php laravel oop dependency-injection ioc-container

我正在为需要保留一些数据的项目构建容器。我从Laravel那里得到了一些想法并将其重新编写成一个小代码示例。我想知道为什么我的第二个例子在这种情况下不起作用。

应用类示例:

class Application extends Container
{
    /**
     * Bind these into the container.
     */
    public function bootstrap()
    {
        static::setInstance($this);

        $this->bind('debugStack', new DebugStack());
        $this->bind('database', new Database());
    }
}

容器类示例:

class Container
{
    protected static $instance;

    protected $registry = [];

    public function bind($key, $value)
    {
        $this->registry[$key] = $value;
    }

    public function get($key)
    {
        if (!array_key_exists($key, $this->registry)) {
            throw new \Exception("No {$key} is bound in the container");
        }

        return $this->registry[$key];
    }

    /**
     * Set the globally available instance of the container.
     *
     * @return static
     */
    public static function getInstance()
    {
        if (is_null(static::$instance)) {
            static::$instance = new static;
        }

        return static::$instance;
    }

    // Allow access to the entire app context.
    public static function setInstance($container = null)
    {
        return static::$instance = $container;
    }
}

重做示例(第二次):

class Application extends Container
{
    /**
     * Bind these into the container.
     */
    public function bootstrap()
    {
        static::getInstance();

        $this->bind('debugStack', new DebugStack());
        $this->bind('database', new Database());
    }
}

getInstance已检查实例是否为is_null,如果未找到实例则提供新实例。我的绑定函数运行正常,但这样我的数据就不会保留。

我很困惑为什么我的数据在第一个例子中保留但在第二个例子中没有。希望有人可以解释为什么会发生这种情况。

如果您需要更多信息,请与我们联系。

0 个答案:

没有答案