ThinkPHP容器之使用設計模式和反射實現一個簡單的案例

2020-10-10 15:00:48

本文將使用倆種設計模式和反射知識實現一個簡單的案例,把之前學習過的知識點進行簡單的融合串聯起來。

五、融合設計模式和反射實現一個案例

經歷了九九八十一難終於來到了容器這一環節,在這一環節我們先來實現一個自己的容器,將之前講解的單例模式、註冊樹模式、反射進行一個串聯,從而進行加深印象和更好的理解。

還記得之前在依賴注入裡邊說過這樣一個方法dependency,這個方法就是進行了依賴注入,從而對程式碼進行解耦。

在這裡插入圖片描述但是這次呢!會使用容器來解決這一問題。

首先先把需要的類定義好,這一個類就使用了單例模式和註冊樹模式,之前的文章沒有好好看的,一定要仔細看一下,否則後文會很難理解的。

在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述在這裡插入圖片描述

<?php
/**
* Created by PhpStorm.
* User: 咔咔
* Date: 2020/9/21
* Time: 19:04
*/


namespace container;


class Container
{
/**
* 存放容器
* @var array
*/

public $instances = [];

/**
* 容器的物件範例
* @var array
*/

protected static $instance;

/**
* 定義一個私有的建構函式防止外部類範例化
* Container constructor.
*/

private function __construct() {

}

/**
* 獲取當前容器的範例(單例模式)
* @return array|Container
*/

public static function getInstance ()
{
if(is_null(self::$instance)){
self::$instance = new self();
}

return self::$instance;
}

public function set ($key,$value)
{
return $this->instances[$key] = $value;
}

public function get ($key)
{
return $this->instances[$key];
}
}

為了方便以後檢視方便,這裡把每節的案例演示都放在對應的控制器中

這裡把之前的依賴注入的程式碼移植過來,並且設定上註解路由進行存取,看最終結果是否為Car方法返回的123

在這裡插入圖片描述測試一下列印結果,一切ok

在這裡插入圖片描述使用單例模式和註冊樹模式配合後修改的這份程式碼

修改後列印出其結果,同樣也是car返回的值123。

在這裡需要注意一下就是在同一個方法中set和get方法是不會共存的,這裡只是為了給大家做一個演示寫到一起的。

後邊在看容器原始碼時就知道set和get方法到底是怎麼使用的,這裡只是讓大家體驗一下單例模式和註冊樹模式。

在這裡插入圖片描述這裡做一個小修改,修改上文中最後倆行程式碼

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

堅持學習、堅持寫博、堅持分享是咔咔從業以來一直所秉持的信念。希望在偌大網際網路中咔咔的文章能帶給你一絲絲幫助。我是咔咔,下期見。

以上就是ThinkPHP容器之使用設計模式和反射實現一個簡單的案例的詳細內容,更多請關注TW511.COM其它相關文章!