laravel singleton模式mange如何反映后续调用的变化?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel singleton模式mange如何反映后续调用的变化?相关的知识,希望对你有一定的参考价值。
众所周知,单身概念对我们非常有用。但是一些潜在的概念让我头疼。
假设我们以下列方式将一个对象绑定为单例。
$this->app->singleton(Singleton::class, function () {
return new Singleton();
});
现在我们知道对象只会被解析一次,然后它将被保存在容器的实例类属性中并以下列方式返回
if (isset($this->instances[$abstract]) && ! $needsContextualBuild) {
return $this->instances[$abstract];
}
好吧到目前为止一切都很好。现在我们正在从控制器修改实例
function index(){
$abc = app(Singleton::class);
$abc->a = 'b;
}
我们正在访问其他功能的单身人士
function test(){
echo app(Singleton::class)->a;
}
当然我们可以看到它打印'b'。但实际上我们在索引函数中所做的是将单例保存到变量$ abc并且我们正在修改该变量,其中我假设从容器的单例数组中驻留单例对象的副本,因为laravel只是从其容器实例返回一个值索引与类名匹配的数组。
但是当我们解析单个对象时,laravel如何管理它以反映下一个函数的变化,因为上面的变化只会影响$ abc变量。
我相信答案会让我发笑,因为我确信我已经错过了一些思考方式。
答案
不,对象实例是passed by reference。
app(Singleton::class)
不会创建副本,它总是返回(引用)Singleton::class
的唯一实例。
以上是关于laravel singleton模式mange如何反映后续调用的变化?的主要内容,如果未能解决你的问题,请参考以下文章