本文將使用倆種設(shè)計(jì)模式和反射知識(shí)實(shí)現(xiàn)一個(gè)簡單的案例,把之前學(xué)習(xí)過的知識(shí)點(diǎn)進(jìn)行簡單的融合串聯(lián)起來。
五、融合設(shè)計(jì)模式和反射實(shí)現(xiàn)一個(gè)案例
經(jīng)歷了九九八十一難終于來到了容器這一環(huán)節(jié),在這一環(huán)節(jié)我們先來實(shí)現(xiàn)一個(gè)自己的容器,將之前講解的單例模式、注冊(cè)樹模式、反射進(jìn)行一個(gè)串聯(lián),從而進(jìn)行加深印象和更好的理解。
還記得之前在依賴注入里邊說過這樣一個(gè)方法dependency
,這個(gè)方法就是進(jìn)行了依賴注入,從而對(duì)代碼進(jìn)行解耦。
但是這次呢!會(huì)使用容器來解決這一問題。
首先先把需要的類定義好,這一個(gè)類就使用了單例模式和注冊(cè)樹模式,之前的文章沒有好好看的,一定要仔細(xì)看一下,否則后文會(huì)很難理解的。

<?php
/**
* Created by PhpStorm.
* User: 咔咔
* Date: 2020/9/21
* Time: 19:04
*/
namespace container;
class Container
{
/**
* 存放容器
* @var array
*/
public $instances = [];
/**
* 容器的對(duì)象實(shí)例
* @var array
*/
protected static $instance;
/**
* 定義一個(gè)私有的構(gòu)造函數(shù)防止外部類實(shí)例化
* Container constructor.
*/
private function __construct() {
}
/**
* 獲取當(dāng)前容器的實(shí)例(單例模式)
* @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];
}
}
為了方便以后查看方便,這里把每節(jié)的案例演示都放在對(duì)應(yīng)的控制器中
這里把之前的依賴注入的代碼移植過來,并且配置上注解路由進(jìn)行訪問,看最終結(jié)果是否為Car方法返回的123
測(cè)試一下打印結(jié)果,一切ok
使用單例模式和注冊(cè)樹模式配合后修改的這份代碼
修改后打印出其結(jié)果,同樣也是car返回的值123。
在這里需要注意一下就是在同一個(gè)方法中set和get方法是不會(huì)共存的,這里只是為了給大家做一個(gè)演示寫到一起的。
后邊在看容器源碼時(shí)就知道set和get方法到底是怎么使用的,這里只是讓大家體驗(yàn)一下單例模式和注冊(cè)樹模式。
這里做一個(gè)小修改,修改上文中最后倆行代碼


堅(jiān)持學(xué)習(xí)、堅(jiān)持寫博、堅(jiān)持分享是咔咔從業(yè)以來一直所秉持的信念。希望在偌大互聯(lián)網(wǎng)中咔咔的文章能帶給你一絲絲幫助。我是咔咔,下期見。