摘要:通常調(diào)用一個(gè)類里面的方法需要如何操作依賴注入模式用來(lái)減少程序間的耦合依賴注入共有三種模式方法注入著重說(shuō)下方法注入并結(jié)合單例注冊(cè)的服務(wù)數(shù)組訪問(wèn)接口測(cè)試郵件發(fā)送成功方式訪問(wèn)通過(guò)數(shù)組的方式訪問(wèn)也是通過(guò)該方式實(shí)現(xiàn)依賴
通常調(diào)用一個(gè)類里面的方法需要如何操作:
$class = new class();
$class->fun()
依賴注入模式用來(lái)減少程序間的耦合
依賴注入共有三種模式: setter 方法注入著重說(shuō)下setter方法注入并結(jié)合ArrayAccess
/** * Class Di * @property People */ class Di implements ArrayAccess { /** * 單例 * @var null */ protected static $instance = null; /** * 注冊(cè)的服務(wù) * @var array */ protected $data = array(); public function __construct() { echo "__construct". " "; } public function onConstruct(){ echo "onConstruct". " "; } public static function one(){ if (self::$instance == null) { self::$instance = new Di(); self::$instance->onConstruct(); } return self::$instance; } public function get($name, $default = NULL) { if (!empty($default)) { return $default; } return $this->data[$name]; } public function set($name, $value) { $this->data[$name] = $value; } public function __get($name) { return $this->get($name); } public function __set($name, $value) { $this->set($name, $value); } /** ArrayAccess數(shù)組訪問(wèn)接口 **/ public function offsetSet($offset, $value) { $this->set($offset, $value); } public function offsetGet($offset) { return $this->get($offset, NULL); } public function offsetUnset($offset) { unset($this->data[$offset]); } public function offsetExists($offset) { return isset($this->data[$offset]); } } class People { protected $name = "測(cè)試"; public function getName(){ return $this->name; } } class Email { public function sendEmail($email){ return "郵件發(fā)送成功!"; } } $di = Di::one(); /** @var get set 方式訪問(wèn) people */ $di->people = new People(); $people = $di->people; echo $di->people->getName(); /** 通過(guò)數(shù)組的方式訪問(wèn) **/ $di["Email"] = new Email(); echo $di["Email"]->sendEmail("[email protected]");
Phalapi也是通過(guò)該方式實(shí)現(xiàn)依賴注入構(gòu)造方法注入
依賴注入相當(dāng)于一個(gè)注冊(cè)中心,通過(guò)魔術(shù)方法__set __get進(jìn)行賦值和取之操作,$di->email
implements ArrayAccess 可以實(shí)現(xiàn)通過(guò)數(shù)組的方式進(jìn)行操作$di["Email"]
通過(guò)__construct出入類
class a { public function test() { echo "test"; } } class c { protected $s; public function __construct($a) { $this->s = $a; } public function test(){ $this->s->test(); } } $a = new a(); $c = new c($a); $c->test();接口注入
interface sql{ public function connect(); public function query(); } class mysql implements sql { public function connect() { echo "連接mysql成功". " "; } public function query() { // TODO: Implement query() method. } } class sqlServe implements sql { public function connect() { echo "連接sqlServe成功". " "; } public function query() { // TODO: Implement query() method. } } class Demo{ public $sql; public function __construct(sql $sql) { $this->sql = $sql; } } $mysql = new mysql(); $sqlServe = new sqlServe(); (new Demo($mysql))->sql->connect();
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29713.html
摘要:在構(gòu)造函數(shù)中注入依賴性在中作為服務(wù)的控制器這是痛苦的,當(dāng)你有個(gè)以上的依賴項(xiàng),你的構(gòu)造函數(shù)是行樣板代碼在屬性中注入依賴性這是我們建議的解決方案。 PHP-DI是用PHP編寫(xiě)的、強(qiáng)大的和實(shí)用的、框架無(wú)關(guān)的依賴注入容器。這是一個(gè)關(guān)于如何使用PHP-DI和依賴注入的最佳實(shí)踐指南。 文章來(lái)源于PHP-DI,作者:Matthieu Napoli和貢獻(xiàn)者。PHP-DI是用PHP編寫(xiě)的、強(qiáng)大的和實(shí)用的...
摘要:標(biāo)量參數(shù)關(guān)聯(lián)傳值依賴是自動(dòng)解析注入的,剩余的標(biāo)量參數(shù)則可以通過(guò)關(guān)聯(lián)傳值,這樣比較靈活,沒(méi)必要把默認(rèn)值的參數(shù)放在函數(shù)參數(shù)最尾部。 更新:github(給個(gè)小星星呀) -- 2018-4-11:優(yōu)化服務(wù)綁定方法 ::bind 的類型檢查模式 借助 PHP 反射機(jī)制實(shí)現(xiàn)的一套 依賴自動(dòng)解析注入 的 IOC/DI 容器,可以作為 Web MVC 框架 的應(yīng)用容器 1、依賴的自動(dòng)注入:你只需要...
摘要:前言最近在使用框架,看了下他的源碼,發(fā)現(xiàn)有很多地方也用到了依賴注入控制反轉(zhuǎn),覺(jué)得有必要和大家簡(jiǎn)單聊一聊什么是依賴注入以及怎么使用它。概念依賴注入和控制反轉(zhuǎn)是對(duì)同一件事情的不同描述,從某個(gè)方面講,就是它們描述的角度不同。 前言 最近在使用ThinkPHP5框架,看了下他的源碼,發(fā)現(xiàn)有很多地方也用到了依賴注入(控制反轉(zhuǎn)),覺(jué)得有必要和大家簡(jiǎn)單聊一聊什么是依賴注入以及怎么使用它。 簡(jiǎn)介 I...
摘要:也正式因?yàn)轭惖姆瓷浜芏嗫蚣懿拍軐?shí)現(xiàn)依賴注入自動(dòng)解決類與類之間的依賴關(guān)系,這給我們平時(shí)的開(kāi)發(fā)帶來(lái)了很大的方便。為了更好地理解,我們通過(guò)一個(gè)例子來(lái)看類的反射,以及如何實(shí)現(xiàn)依賴注入。反射出方法的參數(shù)其返回值為對(duì)象構(gòu)成的數(shù)組。 PHP具有完整的反射 API,提供了對(duì)類、接口、函數(shù)、方法和擴(kuò)展進(jìn)行逆向工程的能力。通過(guò)類的反射提供的能力我們能夠知道類是如何被定義的,它有什么屬性、什么方法、方法都有...
摘要:現(xiàn)在我們就可以在構(gòu)造函數(shù)或者任何其他通過(guò)服務(wù)容器注入依賴項(xiàng)的地方使用類型提示注入接口創(chuàng)建一個(gè)新的類實(shí)例,此處將注入的實(shí)例。自動(dòng)解析構(gòu)造函數(shù)所需的依賴的服務(wù)容器實(shí)現(xiàn)了接口。 簡(jiǎn)單的服務(wù)容器 一個(gè)簡(jiǎn)單的 php 5.3 依賴注入容器。 項(xiàng)目地址:https://github.com/godruoyi/easy-container Why 目前比較流行的 PHP 容器: Pimple La...
摘要:依賴注入傳統(tǒng)的思路應(yīng)用程序用到一個(gè)類就會(huì)創(chuàng)建類并調(diào)用類的方法。這樣你可以完全控制依賴關(guān)系,通過(guò)調(diào)整不同的注入對(duì)象,來(lái)控制程序的行為。例如類用到了,可以在不修改類代碼的情況下,改用。 依賴注入 傳統(tǒng)的思路 應(yīng)用程序用到一個(gè)Foo類,就會(huì)創(chuàng)建Foo類并調(diào)用Foo類的方法。 假如這個(gè)方法內(nèi)需要一個(gè)Bar類,就會(huì)創(chuàng)建Bar類并調(diào)用Bar類的方法。 而這個(gè)方法內(nèi)需要一個(gè)Bim類,就會(huì)創(chuàng)建Bim...
閱讀 3978·2021-10-09 09:43
閱讀 2883·2021-10-08 10:05
閱讀 2746·2021-09-08 10:44
閱讀 891·2019-08-30 15:52
閱讀 2820·2019-08-26 17:01
閱讀 3027·2019-08-26 13:54
閱讀 1659·2019-08-26 10:48
閱讀 815·2019-08-23 14:41