Laravel Ioc容器singleton和bind方法的区别

 我来答
EvenHHZ
2016-08-10 · 知道合伙人软件行家
EvenHHZ
知道合伙人软件行家
采纳数:13691 获赞数:18845
个人出版图书:《玩转Python网络爬虫》、《玩转Django2.0》

向TA提问 私信TA
展开全部
1.Ioc容器bind方法
<?php

require __DIR__.'/../bootstrap/autoload.php';

class tanteng
{
public $name;
}

$container = new Illuminate\Container\Container();

$container->bind('tanteng');

$instance = $container->make('tanteng');
$instance->name = 'tanteng';

$instance2 = $container->make('tanteng');
$instance2->name = 'tuntun';

echo $instance->name.' '.$instance2->name;

输出的结果:
tanteng tuntun
结论:
通过bind方法创建实例不是单例模式,而是创建新的实例。
2.Ioc容器singleton方法
<?php

require __DIR__.'/../bootstrap/autoload.php';

class single
{
public $value;
}

$container = new Illuminate\Container\Container();

$container->singleton('single');
$instance3 = $container->make('single');
$instance4 = $container->make('single');

$instance3->value = 'aaaa';
$instance4->value = 'bbbb';

echo $instance3->value.' '.$instance4->value;

输出结果:
bbbb bbbb
结论:
使用singleton创建实例使用的是单例模式,每次返回同一个实例。
以上代码可以放在public下,如test.php运行。
再看框架底层代码:

public function singleton($abstract, $concrete = null)
{
$this->bind($abstract, $concrete, true);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式