欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1、什么是容器

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

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

2、依賴注入

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

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

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

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

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

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

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

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

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

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

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)建,
// 而是通過IOC容器生成類B后通過參數(shù)的形式傳入類A中;
$ioc = new Ioc();
$b   = $ioc->make('B');
$a   = new A($b);
$a->getB();

4、反射

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

反射函數(shù)參考:

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

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

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

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

相關(guān)文章

  • PHPStorm2020.1永久激活及下載更新至2020(推薦)

    PHPStorm2020.1永久激活及下載更新至2020(推薦)

    這篇文章主要介紹了PHPStorm2020.1永久激活及下載更新至2020,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Laravel中的Auth模塊詳解

    Laravel中的Auth模塊詳解

    最近在工作中遇到了Auth模塊,但是對Auth模塊一知半解,通過查找相關(guān)的資料了解學(xué)習(xí),所以下面這篇文章主要給大家介紹了關(guān)于Laravel中Auth模塊的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • PHP中TP5 上傳文件的實例詳解

    PHP中TP5 上傳文件的實例詳解

    這篇文章主要介紹了PHP中TP5 上傳文件的實例詳解的相關(guān)資料,這里實現(xiàn)PHP 的上傳文件的實例,需要的朋友可以參考下
    2017-07-07
  • 使用phpunit進行接口自動化測試

    使用phpunit進行接口自動化測試

    下面小編就為大家分享一篇使用phpunit進行接口自動化測試,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • PHP封裝請求類實例分析【基于Yii框架】

    PHP封裝請求類實例分析【基于Yii框架】

    這篇文章主要介紹了PHP封裝請求類,結(jié)合實例形式分析了基于Yii框架的curl封裝請求處理的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • thinkphp實現(xiàn)like模糊查詢實例

    thinkphp實現(xiàn)like模糊查詢實例

    這篇文章主要介紹了thinkphp實現(xiàn)like模糊查詢,以實例形式講述了字符串形式及數(shù)組形式作為查詢條件的like模糊查詢實現(xiàn)方法,是非常具有實用價值的技巧,需要的朋友可以參考下
    2014-10-10
  • Linux下從零開始安裝配置Nginx服務(wù)器+PHP開發(fā)環(huán)境

    Linux下從零開始安裝配置Nginx服務(wù)器+PHP開發(fā)環(huán)境

    這篇文章主要介紹了Linux下從零開始安裝配置Nginx服務(wù)器+PHP開發(fā)環(huán)境的教程,文中采用的是最主流的FastCGI連接方法,需要的朋友可以參考下
    2015-12-12
  • 淺談PHP中try{}catch{}的使用方法

    淺談PHP中try{}catch{}的使用方法

    下面小編就為大家?guī)硪黄獪\談PHP中try{}catch{}的使用方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • php中AES加密解密的例子小結(jié)

    php中AES加密解密的例子小結(jié)

    話不多說,先放上代碼,一共有兩個文件:AES.php(aes算法類文件)和aesDemo.php(應(yīng)用實例文件)
    2014-02-02
  • 全面了解PHP中的全局變量

    全面了解PHP中的全局變量

    下面小編就為大家?guī)硪黄媪私釶HP中的全局變量。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06

最新評論