摘要:通常調用一個類里面的方法需要如何操作依賴注入模式用來減少程序間的耦合依賴注入共有三種模式方法注入著重說下方法注入并結合單例注冊的服務數組訪問接口測試郵件發送成功方式訪問通過數組的方式訪問也是通過該方式實現依賴
通常調用一個類里面的方法需要如何操作:
$class = new class();
$class->fun()
依賴注入模式用來減少程序間的耦合
依賴注入共有三種模式: setter 方法注入著重說下setter方法注入并結合ArrayAccess
/** * Class Di * @property People */ class Di implements ArrayAccess { /** * 單例 * @var null */ protected static $instance = null; /** * 注冊的服務 * @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數組訪問接口 **/ 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 = "測試"; public function getName(){ return $this->name; } } class Email { public function sendEmail($email){ return "郵件發送成功!"; } } $di = Di::one(); /** @var get set 方式訪問 people */ $di->people = new People(); $people = $di->people; echo $di->people->getName(); /** 通過數組的方式訪問 **/ $di["Email"] = new Email(); echo $di["Email"]->sendEmail("33@qq.com");
Phalapi也是通過該方式實現依賴注入構造方法注入
依賴注入相當于一個注冊中心,通過魔術方法__set __get進行賦值和取之操作,$di->email
implements ArrayAccess 可以實現通過數組的方式進行操作$di["Email"]
通過__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();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29713.html
摘要:在構造函數中注入依賴性在中作為服務的控制器這是痛苦的,當你有個以上的依賴項,你的構造函數是行樣板代碼在屬性中注入依賴性這是我們建議的解決方案。 PHP-DI是用PHP編寫的、強大的和實用的、框架無關的依賴注入容器。這是一個關于如何使用PHP-DI和依賴注入的最佳實踐指南。 文章來源于PHP-DI,作者:Matthieu Napoli和貢獻者。PHP-DI是用PHP編寫的、強大的和實用的...
摘要:標量參數關聯傳值依賴是自動解析注入的,剩余的標量參數則可以通過關聯傳值,這樣比較靈活,沒必要把默認值的參數放在函數參數最尾部。 更新:github(給個小星星呀) -- 2018-4-11:優化服務綁定方法 ::bind 的類型檢查模式 借助 PHP 反射機制實現的一套 依賴自動解析注入 的 IOC/DI 容器,可以作為 Web MVC 框架 的應用容器 1、依賴的自動注入:你只需要...
摘要:前言最近在使用框架,看了下他的源碼,發現有很多地方也用到了依賴注入控制反轉,覺得有必要和大家簡單聊一聊什么是依賴注入以及怎么使用它。概念依賴注入和控制反轉是對同一件事情的不同描述,從某個方面講,就是它們描述的角度不同。 前言 最近在使用ThinkPHP5框架,看了下他的源碼,發現有很多地方也用到了依賴注入(控制反轉),覺得有必要和大家簡單聊一聊什么是依賴注入以及怎么使用它。 簡介 I...
摘要:也正式因為類的反射很多框架才能實現依賴注入自動解決類與類之間的依賴關系,這給我們平時的開發帶來了很大的方便。為了更好地理解,我們通過一個例子來看類的反射,以及如何實現依賴注入。反射出方法的參數其返回值為對象構成的數組。 PHP具有完整的反射 API,提供了對類、接口、函數、方法和擴展進行逆向工程的能力。通過類的反射提供的能力我們能夠知道類是如何被定義的,它有什么屬性、什么方法、方法都有...
摘要:現在我們就可以在構造函數或者任何其他通過服務容器注入依賴項的地方使用類型提示注入接口創建一個新的類實例,此處將注入的實例。自動解析構造函數所需的依賴的服務容器實現了接口。 簡單的服務容器 一個簡單的 php 5.3 依賴注入容器。 項目地址:https://github.com/godruoyi/easy-container Why 目前比較流行的 PHP 容器: Pimple La...
摘要:依賴注入傳統的思路應用程序用到一個類就會創建類并調用類的方法。這樣你可以完全控制依賴關系,通過調整不同的注入對象,來控制程序的行為。例如類用到了,可以在不修改類代碼的情況下,改用。 依賴注入 傳統的思路 應用程序用到一個Foo類,就會創建Foo類并調用Foo類的方法。 假如這個方法內需要一個Bar類,就會創建Bar類并調用Bar類的方法。 而這個方法內需要一個Bim類,就會創建Bim...
閱讀 3967·2021-10-09 09:43
閱讀 2878·2021-10-08 10:05
閱讀 2737·2021-09-08 10:44
閱讀 888·2019-08-30 15:52
閱讀 2815·2019-08-26 17:01
閱讀 3021·2019-08-26 13:54
閱讀 1656·2019-08-26 10:48
閱讀 814·2019-08-23 14:41