当前文章: 首页 >> 未分类 >> laravel绑定操作bind、singleton和instance区别
聚划算
«   2020年5月   »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
    海外云服务器CPS_轻量拓展全民云计算企业云服务器云盾证书
标签列表
最近发表
友站访问排行

laravel绑定操作bind、singleton和instance区别

绑定

绑定基础

几乎所有的服务容器绑定都是在服务提供者中完成。因此本文档的演示例子用到的容器都是在服务提供者中绑定。


注:如果一个类没有基于任何接口那么就没有必要将其绑定到容器。容器并不需要被告知如何构建对象,因为它会使用 PHP 的反射服务自动解析出具体的对象。


简单的绑定


在一个服务提供者中,可以通过 $this->app 变量访问容器,然后使用 bind 方法注册一个绑定,该方法需要两个参数,第一个参数是我们想要注册的类名或接口名称,第二个参数是返回类的实例的闭包:


$this->app->bind('HelpSpot\API', function ($app) {
    return new HelpSpot\API($app->make('HttpClient'));
});

注意到我们将容器本身作为解析器的一个参数,然后我们可以使用该容器来解析我们正在构建的对象的子依赖。


绑定一个单例


singleton 方法绑定一个只会解析一次的类或接口到容器,然后接下来对容器的调用将会返回同一个对象实例:


$this->app->singleton('HelpSpot\API', function ($app) {
    return new HelpSpot\API($app->make('HttpClient'));
});

绑定实例


你还可以使用 instance 方法绑定一个已存在的对象实例到容器,随后调用容器将总是返回给定的实例:


$api = new HelpSpot\API(new HttpClient);
$this->app->instance('HelpSpot\API', $api);


简单总结

bind: 绑定一个实例,每次调用都返回一个新实例,相当每次都new一个新实例;

singleton:绑定一个单例,每次调用都返回同一个实例(第一次调用先new),相当于=一个新实现;

instance: 绑定一个已经初始化后的实例,相当于=一个实现;



参考: https://laravelacademy.org/post/19434.html

参考: https://www.cnblogs.com/fengzmh/p/10289381.html

声明:本站原创文章,转载、复制、使用等请注明出处。
标题laravel绑定操作bind、singleton和instance区别
作者jues
地址: http://blog.jues.org.cn/post/laravel-bang-ding-cao-zuo-bindsingleton-he-instance-qu-bie.html

发表评论:

Powered By Z-BlogPHP 1.6.0 Valyria Powered By Z-BlogPHP © 2018 jues博客 Copyright Your WebSite.Some Rights Reserved.联系站长 Themes by jues

分享:

支付宝

微信