laravel singleton模式mange如何反映后续调用的变化?

fay*_*003 5 php dependency-injection laravel

众所周知,单身概念对我们非常有用.但是一些潜在的概念让我头疼.

假设我们以下列方式将一个对象绑定为单例.

$this->app->singleton(Singleton::class, function () {
            return new Singleton();
        });
Run Code Online (Sandbox Code Playgroud)

现在我们知道对象只会被解析一次,然后它将被保存在容器的实例类属性中并以下列方式返回

if (isset($this->instances[$abstract]) && ! $needsContextualBuild) {
            return $this->instances[$abstract];
        }
Run Code Online (Sandbox Code Playgroud)

好吧到目前为止一切都很好.现在我们正在从控制器修改实例

function index(){
   $abc = app(Singleton::class);
   $abc->a = 'b;
}
Run Code Online (Sandbox Code Playgroud)

我们正在访问其他功能的单身人士

function test(){
   echo app(Singleton::class)->a;
}
Run Code Online (Sandbox Code Playgroud)

当然我们可以看到它打印'b'.但实际上我们在索引函数中所做的是将单例保存到变量$ abc并且我们正在修改该变量,其中我假设从容器的单例数组中驻留单例对象的副本,因为laravel只是从其容器实例返回一个值索引与类名匹配的数组.

但是当我们解析单个对象时,laravel如何管理它以反映下一个函数的变化,因为上面的变化只会影响$ abc变量.

我相信答案会让我发笑,因为我确信我已经错过了一些思考方式.

Ran*_*eed 2

不,对象实例是通过引用传递的

app(Singleton::class)不创建副本,它总是返回(引用)唯一的Singleton::class.