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

一文搞懂PHP中的DI依賴注入

 更新時間:2022年08月02日 09:05:01   作者:極客飛兔  
依賴注入DI 其實本質上是指對類的依賴通過構造器完成 自動注入。本文將通過一些示例帶大家深入了解一下PHP中的DI依賴注入,需要的可以參考一下

什么是 DI / 依賴注入

依賴注入DI 其實本質上是指對類的依賴通過構造器完成 自動注入

通俗來說,就是你當前操作一個類,但是這個類的某些方法或者功能不是單單只靠這個類就能完成的,而是要 借助另一個類 的才能完成的

最直接的標志就是傳參數據為對象的時候。嚴格來說,你想在一個類中操作另一個類,這兩個類之間形成了相互依賴關系,傳參的方式叫 注入

依賴注入出現的原因

在未使用依賴注入的時候,php 需要在一個類中使用另一個類的時候,往往都會進行如下操作

比如我在 container 類中需要用到 adapter 類,就需要在使用之前進行實例化

如果需要用到大量的外部類,這就會造成了 耦合度太高,很容易造成后期的 維護困難

通俗的來講,也就是 container 脫離不了外部類去工作,這就叫 耦合度太高

<?php
class container
{
    private $adapter;

    public function __construct()
    {
        $this->adapter = new adapter();
    }
}

簡單的依賴注入

上面的代碼耦合度太高,導致了 依賴注入 的出現,主要是為了 解耦合

如下案例,我們只需要將所需要操作的類對象傳入即可

依賴注入 操作的參數是 對象,而不是普通參數,是不是有更好的理解了

但是這樣的簡單依賴注入,會造成如果你依賴的類很多,你傳參的時候會很長,容易混亂

<?php
class container
{
    private $adapter;

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

高階的依賴注入

為了解決上面 參數混亂 的問題,這時候,依賴注入進行了優(yōu)化

通過魔術方法,__get 去設置對象

這時候,我們就可以解決依賴太多,參數混亂的問題了

<?php
class container
{
    public $instance = [];

    public function __set($name, $value)
    {
        $this->instance[$name] = $value;
    }
}

$container = new container();

$container->adapter = new adapter();
$container->autofelix = new autofelix();

依賴注入的應用

我們先定義一個 容器類,主要用來向容器中 注入 你想要操作的類

使用的時候,只需要傳容器這一個 對象 即可

<?php
class container
{
    public $instance = [];

    public function __set($name, $value)
    {
        $this->instance[$name] = $value;
    }
}

class adapter
{
    public $name = '我是調度器';
}

$container = new container();
$container->adapter = new adapter();

class autofelix
{
    private $container;

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

    public function who($class)
    {
        return $this->container->instance[$class]->name;
    }
}

$autofelix = new autofelix($container);

$who = $autofelix->who('adapter');

var_dump($who); //我是調度器

依賴注入高階優(yōu)化

在上面的應用中,我們 直接 將實例化后的對象注入容器中

這樣會導致,所有的對象還沒有被使用就會被實例化一遍,造成 資源的損耗

我們可以 傳入閉包,這樣對象就不會被實例化而注入,當你自己需要使用的時候,再去實例化,就可以減少 服務器資源的損耗 了

<?php
$container = new container();
$container->adapter = new adapter();

//高階優(yōu)化
$container = new container();
$container->adapter = function () {
    return new adapter();
};

到此這篇關于一文搞懂PHP中的DI依賴注入的文章就介紹到這了,更多相關PHP DI依賴注入內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • PHP FOR MYSQL 代碼生成助手(根據Mysql里的字段自動生成類文件的)

    PHP FOR MYSQL 代碼生成助手(根據Mysql里的字段自動生成類文件的)

    根據 Mysql里的字段自動生成類文件的實現代碼,學習php的朋友可以參考下。
    2011-07-07
  • php使用Swoole與WebSocket實現彈幕效果的示例代碼

    php使用Swoole與WebSocket實現彈幕效果的示例代碼

    在本文中,我們將深入探討如何使用Swoole與WebSocket結合,實現彈幕效果,并著重強調需要注意的關鍵地方,以確保我們的彈幕系統(tǒng)能夠高效、穩(wěn)定地運行,感興趣的朋友可以參考下
    2024-02-02
  • PHP通用檢測函數集合

    PHP通用檢測函數集合

    這些函數都要測試才能使用,不保證個個都能使用,很多好的代碼函數都可以在phpcms,dedecms,帝國cms中查找。
    2011-02-02
  • php數據庫中將base64圖片數據轉化為可訪問src的方法詳解

    php數據庫中將base64圖片數據轉化為可訪問src的方法詳解

    后端同學在對一些老項目進行二次開發(fā)時候,可能會遇到一些小的圖片以base64的方式存儲在數據庫中的情況,這樣做的好處是這些圖片數據一般不會因為項目重新部署而丟失,但是這么做也會存在一些壞處,本文給大家介紹了php數據庫中base64圖片數據轉化可訪問的src的方法
    2023-10-10
  • php防盜鏈的常用方法小結

    php防盜鏈的常用方法小結

    php防盜鏈的方法,大家可以參考下。
    2010-07-07
  • PHP使用Reli分析性能,生成PHP性能火焰圖

    PHP使用Reli分析性能,生成PHP性能火焰圖

    Reli 是一個用PHP編寫的采樣分析器(或VM狀態(tài)檢查器),它可以從進程外部讀取有關運行PHP腳本的信息,它是一個獨立的CLI工具,因此目標程序不需要任何修改,檢測和可視化PHP腳本中的瓶頸,它不僅提供函數級的分析,而且還提供行級或操作碼級的解析
    2024-01-01
  • PHP日期處理函數 整型日期格式

    PHP日期處理函數 整型日期格式

    我正打算用PHP編寫一種幫助處理系統(tǒng)。我發(fā)現我必須知道處理完最后一位客戶的問題后已經過去了多長時間?
    2011-01-01
  • 解析PHP觀察者模式Observer

    解析PHP觀察者模式Observer

    Observer,首先要有一個被觀察的角色,但它是【唯一的】。雖然"表演者"只有一個但是"觀眾"有很多,既一群"人"圍觀一個"人"。既然有無數個觀察者,那么我們需要知道都有哪一些"人"。所以我們需要一個“容器”來記錄這些"人",一個類似于數組一樣來儲存所有觀察者的容器。
    2021-05-05
  • php出現內存位置訪問無效錯誤問題解決方法

    php出現內存位置訪問無效錯誤問題解決方法

    這篇文章主要介紹了php出現內存位置訪問無效錯誤問題解決方法,本文分析后得出的原因是sqlite擴展導致,需要的朋友可以參考下
    2014-08-08
  • phpmyadmin顯示utf8_general_ci中文亂碼的問題終級篇

    phpmyadmin顯示utf8_general_ci中文亂碼的問題終級篇

    自己寫PHP也有一年多了,然后編碼問題卻老是沒有得到好的解決,自己的情況是這樣的,網頁顯示完全正常,在phpmyadmin數據庫顯示中文亂碼,不管是簡體還是繁體,只要是中文都是亂碼
    2013-04-04

最新評論