资讯专栏INFORMATION COLUMN

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

habren / 543人阅读

摘要:容器方法输出结果结论使用创建实例使用的是单例模式,每次返回同一个实例。以上代码可以放在下,如运行。再看框架底层代码发现方法其实也是调用方法,只是最后一个参数是,表示单例模式。

Laravel中使用Ioc容器的singleton方法和bind方法创建实例有什么区别呢?它们两个都是返回一个类的实例,不同的是singleton是单例模式,而bind是每次返回一个新的实例,看下面的两个例子。

1.Ioc容器bind方法

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方法

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

发现singleton方法其实也是调用bind方法,只是最后一个参数是true,表示单例模式。框架源代码:Illuminate/Container/Container.php

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21326.html

相关文章

  • Laravel深入学习2 - 控制反转容器

    摘要:控制反转容器控制反转使依赖注入变得更加便捷。有瑕疵控制反转容器是实现的控制翻转容器的一种替代方案。容器的独立使用即使没有使用框架,我们仍然可以在项目中使用安装组件来使用的控制反转容器。在没有给定任何信息的情况下,容器是无法实例化相关依赖的。 声明:本文并非博主原创,而是来自对《Laravel 4 From Apprentice to Artisan》阅读的翻译和理解,当然也不是原汁原味...

    worldligang 评论0 收藏0
  • Laravel核心——Ioc服务容器

    摘要:服务容器在说容器之前,我们需要了解什么是容器。服务容器是一个用于管理类依赖和执行依赖注入的强大工具。几乎所有的服务容器绑定都是在服务提供者中完成,也就是在服务提供者中绑定。 服务容器 在说 Ioc 容器之前,我们需要了解什么是 Ioc 容器。 Laravel 服务容器是一个用于管理类依赖和执行依赖注入的强大工具。 在理解这句话之前,我们需要先了解一下服务容器的来龙去脉: larave...

    arashicage 评论0 收藏0
  • Laravel学习笔记之IoC Container实例化源码解析

    摘要:说明本文主要学习容器的实例化过程,主要包括等四个过程。看下的源码如果是数组,抽取别名并且注册到中,上文已经讨论实际上就是的。 说明:本文主要学习Laravel容器的实例化过程,主要包括Register Base Bindings, Register Base Service Providers , Register Core Container Aliases and Set the ...

    ningwang 评论0 收藏0
  • 为什么我们需要 Laravel IoC 容器

    摘要:哲学的一个重要组成部分就是容器,也可以称为服务容器。那我们要怎么做呢请看下面的例子数据库连接通过上面的代码,如果我们想把改成,根本不需要去修改类构造函数里的依赖。现在我要讲下容器里到底发生了什么。 showImg(https://segmentfault.com/img/remote/1460000018868909); IOC 容器是一个实现依赖注入的便利机制 - Taylor Ot...

    xiaokai 评论0 收藏0
  • Laravel核心——Ioc服务容器源码解析(服务器绑定)

    摘要:服务容器的绑定绑定欢迎关注我的博客绑定是服务容器最常用的绑定方式,在上一篇文章中我们讨论过,的绑定有三种绑定自身绑定闭包绑定接口今天,我们这篇文章主要从源码上讲解服务容器是如何进行绑定的。将闭包函数和单例变量存入数组中,以备解析时使用。 服务容器的绑定 bind 绑定 欢迎关注我的博客:www.leoyang90.cn bind 绑定是服务容器最常用的绑定方式,在 上一篇文章中我们讨论...

    imtianx 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<