日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 依赖注入框架,依赖注入模式(Dependency Injection)

發布時間:2024/7/23 php 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 依赖注入框架,依赖注入模式(Dependency Injection) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

依賴注入模式(Dependency Injection)

由 學院君 創建于5年前, 最后更新于 10個月前

版本號 #3

18333 views

16 likes

0 collects

1、模式定義

依賴注入(Dependency Injection)是控制反轉(Inversion of Control)的一種實現方式。

我們先來看看什么是控制反轉。

當調用者需要被調用者的協助時,在傳統的程序設計過程中,通常由調用者來創建被調用者的實例,但在這里,創建被調用者的工作不再由調用者來完成,而是將被調用者的創建移到調用者的外部,從而反轉被調用者的創建,消除了調用者對被調用者創建的控制,因此稱為控制反轉。

要實現控制反轉,通常的解決方案是將創建被調用者實例的工作交由?IoC 容器來完成,然后在調用者中注入被調用者(通過構造器/方法注入實現),這樣我們就實現了調用者與被調用者的解耦,該過程被稱為依賴注入。

依賴注入不是目的,它是一系列工具和手段,最終的目的是幫助我們開發出松散耦合(loose coupled)、可維護、可測試的代碼和程序。這條原則的做法是大家熟知的面向接口,或者說是面向抽象編程。

2、UML 類圖

3、示例代碼

在本例中,我們在 Connection 類(調用者)的構造方法中依賴注入 Parameters 接口的實現類(被調用者),如果不使用依賴注入的話,則必須在 Connection 中創建該接口的實現類實例,這就形成緊耦合代碼,如果我們要切換成該接口的其它實現類則必須要修改代碼,這對到測試和擴展而言都是極為不利的。

AbstractConfig.php

namespace DesignPatterns\Structural\DependencyInjection;

/**

* AbstractConfig類

*/

abstract class AbstractConfig

{

/**

* @var Storage of data

*/

protected $storage;

public function __construct($storage)

{

$this->storage = $storage;

}

}

Parameters.php

namespace DesignPatterns\Structural\DependencyInjection;

/**

* Parameters接口

*/

interface Parameters

{

/**

* 獲取參數

*

* @param string|int $key

*

* @return mixed

*/

public function get($key);

/**

* 設置參數

*

* @param string|int $key

* @param mixed $value

*/

public function set($key, $value);

}

ArrayConfig.php

namespace DesignPatterns\Structural\DependencyInjection;

/**

* ArrayConfig類

*

* 使用數組作為數據源

*/

class ArrayConfig extends AbstractConfig implements Parameters

{

/**

* 獲取參數

*

* @param string|int $key

* @param null $default

* @return mixed

*/

public function get($key, $default = null)

{

if (isset($this->storage[$key])) {

return $this->storage[$key];

}

return $default;

}

/**

* 設置參數

*

* @param string|int $key

* @param mixed $value

*/

public function set($key, $value)

{

$this->storage[$key] = $value;

}

}

Connection.php

namespace DesignPatterns\Structural\DependencyInjection;

/**

* Connection類

*/

class Connection

{

/**

* @var Configuration

*/

protected $configuration;

/**

* @var Currently connected host

*/

protected $host;

/**

* @param Parameters $config

*/

public function __construct(Parameters $config)

{

$this->configuration = $config;

}

/**

* connection using the injected config

*/

public function connect()

{

$host = $this->configuration->get('host');

// connection to host, authentication etc...

//if connected

$this->host = $host;

}

/*

* 獲取當前連接的主機

*

* @return string

*/

public function getHost()

{

return $this->host;

}

}

4、測試代碼

Tests/DependencyInjectionTest.php

namespace DesignPatterns\Structural\DependencyInjection\Tests;

use DesignPatterns\Structural\DependencyInjection\ArrayConfig;

use DesignPatterns\Structural\DependencyInjection\Connection;

class DependencyInjectionTest extends \PHPUnit_Framework_TestCase

{

protected $config;

protected $source;

public function setUp()

{

$this->source = include 'config.php';

$this->config = new ArrayConfig($this->source);

}

public function testDependencyInjection()

{

$connection = new Connection($this->config);

$connection->connect();

$this->assertEquals($this->source['host'], $connection->getHost());

}

}

Tests/config.php

return array('host' => 'github.com');

5、總結

依賴注入模式需要在調用者外部完成容器創建以及容器中接口與實現類的運行時綁定工作,在 Laravel 中該容器就是服務容器,而接口與實現類的運行時綁定則在服務提供者中完成。此外,除了在調用者的構造函數中進行依賴注入外,還可以通過在調用者的方法中進行依賴注入。

總結

以上是生活随笔為你收集整理的php 依赖注入框架,依赖注入模式(Dependency Injection)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。