成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP 依賴注入

zengdongbao / 1341人閱讀

摘要:通常調(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)依賴注入 
依賴注入相當(dāng)于一個(gè)注冊(cè)中心,通過(guò)魔術(shù)方法__set __get進(jìn)行賦值和取之操作,$di->email
implements ArrayAccess 可以實(shí)現(xiàn)通過(guò)數(shù)組的方式進(jìn)行操作$di["Email"]
構(gòu)造方法注入

通過(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

相關(guān)文章

  • 【譯文】PHP-DI和依賴注入的最佳實(shí)踐

    摘要:在構(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í)用的...

    ivydom 評(píng)論0 收藏0
  • PHP IOC/DI 容器 - 依賴自動(dòng)注入/依賴單例注入/依賴契約注入/參數(shù)關(guān)聯(lián)傳值

    摘要:標(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)注入:你只需要...

    Paul_King 評(píng)論0 收藏0
  • 聊一聊PHP依賴注入(DI) 和 控制反轉(zhuǎn)(IoC)

    摘要:前言最近在使用框架,看了下他的源碼,發(fā)現(xiàn)有很多地方也用到了依賴注入控制反轉(zhuǎn),覺(jué)得有必要和大家簡(jiǎn)單聊一聊什么是依賴注入以及怎么使用它。概念依賴注入和控制反轉(zhuǎn)是對(duì)同一件事情的不同描述,從某個(gè)方面講,就是它們描述的角度不同。 前言 最近在使用ThinkPHP5框架,看了下他的源碼,發(fā)現(xiàn)有很多地方也用到了依賴注入(控制反轉(zhuǎn)),覺(jué)得有必要和大家簡(jiǎn)單聊一聊什么是依賴注入以及怎么使用它。 簡(jiǎn)介 I...

    sixgo 評(píng)論0 收藏0
  • 淺析如何通過(guò)PHP類的反射來(lái)實(shí)現(xiàn)依賴注入

    摘要:也正式因?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ò)類的反射提供的能力我們能夠知道類是如何被定義的,它有什么屬性、什么方法、方法都有...

    WilsonLiu95 評(píng)論0 收藏0
  • 又一個(gè)強(qiáng)大的PHP5.3依賴注入容器

    摘要:現(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...

    sf190404 評(píng)論0 收藏0
  • PHP依賴注入(代碼全篇)

    摘要:依賴注入傳統(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...

    felix0913 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<