最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

掌握Laravel框架中容器的管理依賴實(shí)現(xiàn)松耦合

 更新時(shí)間:2023年10月10日 09:07:46   作者:begin  
這篇文章主要為大家介紹了掌握Laravel框架中容器管理依賴實(shí)現(xiàn)松耦合,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1、什么是容器

容器是一個(gè)用于管理類依賴和執(zhí)行類依賴注入的工具,簡(jiǎn)而言之,容器就是我們?cè)趹?yīng)用程序中定義、綁定和解析依賴項(xiàng),以實(shí)現(xiàn)松耦合和可測(cè)試性。在laravel中應(yīng)用本身就是一個(gè)容器,容器管理調(diào)用各種服務(wù) laravel在運(yùn)行的時(shí)候會(huì)創(chuàng)建一個(gè)app對(duì)象 這個(gè)對(duì)象就是容器 所有的服務(wù)都是在app中調(diào)用的。

幾乎所有的服務(wù)容器綁定都會(huì)在服務(wù)提供者中注冊(cè),在服務(wù)提供者中可以通過(guò)blind方法去注冊(cè)一個(gè)綁定,也可以通過(guò)單例singleton去注冊(cè)綁定,還有instance等方法注冊(cè)綁定。

2、依賴注入

在Laravel框架中,開(kāi)發(fā)者可以使用以下方式實(shí)現(xiàn)依賴注入:

1.在控制器的構(gòu)造函數(shù)中聲明依賴 注入Application實(shí)例

public function __construct(Application $app)
    {
        $this->app = $app;
    }

2.在控制器方法中聲明依賴 注入Closure實(shí)例

public function handle($request, Closure $next, ...$guards)
    {
        $this->authenticate($request, $guards);
        return $next($request);
    }

3.使用閉包函數(shù)生成對(duì)象

use?App\Repositories\UserRepository;
use?App\Services\UserService;
use?Illuminate\Contracts\Container\Container;
class?UserController?extends?Controller
{
????protected?$container;
????public?function?__construct(Container?$container)
????{
????????$this->container?=?$container;
????}
????public?function?getUser($id)
????{
????????$userService?=?$this->container->make(UserService::class,?[
????????????'userRepository'?=>?$this->container->make(UserRepository::class),
????????]);
????????$user?=?$userService->getUser($id);
????????return?view('user',?compact('user'));
????}
}

上面的代碼中,我們?cè)跇?gòu)造函數(shù)中注入了一個(gè)Container對(duì)象,然后通過(guò)make方法生成了一個(gè)UserService對(duì)象,并將UserRepository對(duì)象作為參數(shù)傳遞給make方法。

3、IOC(控制反轉(zhuǎn))

控制反轉(zhuǎn)(Inversion of Control,IoC)是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)模式,它是一種將控制權(quán)轉(zhuǎn)移給另一個(gè)對(duì)象的方式,以達(dá)到降低代碼的耦合度的目的。

class A
{
    protected $b;
    public function __construct(B $b) {
        $this->b = $b;
    }
    public function getB(){
        return $this->b->bMethod();
    }
}
class B 
{
    public function __construct() {}
    public function bMethod(){
        return "Hello World!";
    }
}
// IOC容器類
class Ioc
{
    protected $instances = [];
    public function __construct() {
        $this->instances['B'] = new B();
        $this->instances['C'] = new C();
        $this->instances['D'] = new D();
    }
    public function make($abstract){
        return $this->instances[$abstract];
    }
}
// 控制反轉(zhuǎn):類與類的依賴關(guān)系不再在類A中創(chuàng)建,
// 而是通過(guò)IOC容器生成類B后通過(guò)參數(shù)的形式傳入類A中;
$ioc = new Ioc();
$b   = $ioc->make('B');
$a   = new A($b);
$a->getB();

4、反射

反射是程序?qū)崿F(xiàn)依賴注入的基礎(chǔ),也是Laravel服務(wù)容器實(shí)現(xiàn)服務(wù)解析的基礎(chǔ)

反射函數(shù)參考:

ReflectionClass 報(bào)告了一個(gè)類的有關(guān)信息
ReflectionClass::getConstructor — 獲取類的構(gòu)造函數(shù)
ReflectionClass::getConstructor::getParameters — 獲取到Constructor的屬性值
ReflectionClass::newInstanceArgs — 從給出的參數(shù)創(chuàng)建一個(gè)新的類實(shí)例。
ReflectionParameter::getClass — 獲得類型提示類。
ReflectionParameter::isDefaultValueAvailable — 檢查是否有默認(rèn)值。
ReflectionParameter::getDefaultValue — 獲取到默認(rèn)的屬性值

如下幾組方法,就是反射。

//獲取類的反射信息,也就是類的所有信息
$reflector = new ReflectionClass(類名);
 echo $reflector->getDocComment();  獲取類的注釋信息
//獲取反射類的構(gòu)造函數(shù)信息
$constructor = $reflector->getConstructor();
//獲取反射類的構(gòu)造函數(shù)的參數(shù)
$dependencies = $constructor->getParameters();

以上就是掌握Laravel框架中容器管理依賴實(shí)現(xiàn)松耦合的詳細(xì)內(nèi)容,更多關(guān)于Laravel框架容器管理依賴的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • thinkphp3.x中session方法的用法分析

    thinkphp3.x中session方法的用法分析

    這篇文章主要介紹了thinkphp3.x中session方法,全面分析了thinkPHP中session的初始化、設(shè)置、賦值、刪除、管理等各種常用操作技巧,需要的朋友可以參考下
    2016-05-05
  • php 魔術(shù)常量詳解及實(shí)例代碼

    php 魔術(shù)常量詳解及實(shí)例代碼

    魔術(shù)常量 php向它運(yùn)行的任何腳本提供了大量的預(yù)定義常量了,我們常用的php魔術(shù)常量有 __CLASS__ __FUNCTION__ __LINE__ __FILE__ __DIR__ __METHOD__了,本文章通過(guò)php實(shí)例向大家介紹php魔術(shù)常量
    2016-12-12
  • Thinkphp5.0 框架視圖view的比較標(biāo)簽用法分析

    Thinkphp5.0 框架視圖view的比較標(biāo)簽用法分析

    這篇文章主要介紹了Thinkphp5.0 框架視圖view的比較標(biāo)簽用法,結(jié)合實(shí)例形式分析了thinkPHP5框架eq、equal、neq、notequal、egt及switch、range、between等標(biāo)簽相關(guān)用法,需要的朋友可以參考下
    2019-10-10
  • PHP與Java進(jìn)行通信的實(shí)現(xiàn)方法

    PHP與Java進(jìn)行通信的實(shí)現(xiàn)方法

    這篇文章主要介紹了php與java通信的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2013-10-10
  • PHP 中提示undefined index如何解決(多種方法)

    PHP 中提示undefined index如何解決(多種方法)

    這篇文章主要介紹了PHP 中提示undefined index如何解決(多種方法)的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • PHP在線書(shū)簽系統(tǒng)分享

    PHP在線書(shū)簽系統(tǒng)分享

    這篇文章主要為大家介紹了PHP在線書(shū)簽系統(tǒng),分析系統(tǒng)需求、提出解決方案,建立數(shù)據(jù)庫(kù),實(shí)現(xiàn)基本網(wǎng)站的框架,需要的朋友可以參考下
    2016-01-01
  • Yii2中添加全局函數(shù)的方法分析

    Yii2中添加全局函數(shù)的方法分析

    這篇文章主要介紹了Yii2中添加全局函數(shù)的方法,結(jié)合實(shí)例形式對(duì)比分析了2種添加全局函數(shù)的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-05-05
  • 詳解如何在PHP中使用布隆過(guò)濾器

    詳解如何在PHP中使用布隆過(guò)濾器

    布隆過(guò)濾器(Bloom?Filter)是一種用于快速判斷一個(gè)元素是否屬于某個(gè)集合的概率型數(shù)據(jù)結(jié)構(gòu),本文主要為大家介紹一下如何在PHP中使用布隆過(guò)濾器,需要的可以參考一下
    2023-06-06
  • php創(chuàng)建sprite

    php創(chuàng)建sprite

    本文介紹了使用PHP根據(jù)文件夾內(nèi)的圖片生成sprite合成圖示例,需要的朋友可以參考下
    2014-02-02
  • 用php制作簡(jiǎn)單分頁(yè)(從數(shù)據(jù)庫(kù)讀取記錄)的方法詳解

    用php制作簡(jiǎn)單分頁(yè)(從數(shù)據(jù)庫(kù)讀取記錄)的方法詳解

    本篇文章介紹了,使用php制作簡(jiǎn)單分頁(yè)(從數(shù)據(jù)庫(kù)讀取記錄)的方法詳解。需要的朋友參考下
    2013-05-05

最新評(píng)論

西和县| 宜城市| 叙永县| 泸州市| 龙山县| 普兰店市| 婺源县| 马鞍山市| 陆良县| 扎赉特旗| 嘉定区| 邯郸市| 金沙县| 孝昌县| 高密市| 梨树县| 昌平区| 临高县| 巴彦县| 泾川县| 水富县| 蒙城县| 乌拉特前旗| 类乌齐县| 屏南县| 庄浪县| 彭山县| 阿拉善右旗| 台前县| 石泉县| 双鸭山市| 广河县| 色达县| 新绛县| 临夏市| 敦化市| 舞阳县| 思南县| 渭南市| 长治县| 启东市|