成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

PHP 依賴注入

zengdongbao / 1386人閱讀

摘要:通常調(diào)用一個(gè)類里面的方法需要如何操作依賴注入模式用來減少程序間的耦合依賴注入共有三種模式方法注入著重說下方法注入并結(jié)合單例注冊(cè)的服務(wù)數(shù)組訪問接口測試郵件發(fā)送成功方式訪問通過數(shù)組的方式訪問也是通過該方式實(shí)現(xiàn)依賴

通常調(diào)用一個(gè)類里面的方法需要如何操作:

$class = new class();
$class->fun()

依賴注入模式用來減少程序間的耦合

依賴注入共有三種模式: setter 方法注入

著重說下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ù)組訪問接口 **/

    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 "郵件發(fā)送成功!";
    }

}

$di = Di::one();
/** @var get set 方式訪問 people */
$di->people = new People();
$people = $di->people;
echo $di->people->getName();

/** 通過數(shù)組的方式訪問 **/
$di["Email"] = new Email();
echo $di["Email"]->sendEmail("33@qq.com");
Phalapi也是通過該方式實(shí)現(xiàn)依賴注入 
依賴注入相當(dāng)于一個(gè)注冊(cè)中心,通過魔術(shù)方法__set __get進(jìn)行賦值和取之操作,$di->email
implements ArrayAccess 可以實(shí)現(xiàn)通過數(shù)組的方式進(jìn)行操作$di["Email"]
構(gòu)造方法注入

通過__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://m.hztianpu.com/yun/29713.html

相關(guān)文章

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

    摘要:在構(gòu)造函數(shù)中注入依賴性在中作為服務(wù)的控制器這是痛苦的,當(dāng)你有個(gè)以上的依賴項(xiàng),你的構(gòu)造函數(shù)是行樣板代碼在屬性中注入依賴性這是我們建議的解決方案。 PHP-DI是用PHP編寫的、強(qiáng)大的和實(shí)用的、框架無關(guān)的依賴注入容器。這是一個(gè)關(guān)于如何使用PHP-DI和依賴注入的最佳實(shí)踐指南。 文章來源于PHP-DI,作者:Matthieu Napoli和貢獻(xiàn)者。PHP-DI是用PHP編寫的、強(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ān)聯(lián)傳值,這樣比較靈活,沒必要把默認(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),覺得有必要和大家簡單聊一聊什么是依賴注入以及怎么使用它。概念依賴注入和控制反轉(zhuǎn)是對(duì)同一件事情的不同描述,從某個(gè)方面講,就是它們描述的角度不同。 前言 最近在使用ThinkPHP5框架,看了下他的源碼,發(fā)現(xiàn)有很多地方也用到了依賴注入(控制反轉(zhuǎn)),覺得有必要和大家簡單聊一聊什么是依賴注入以及怎么使用它。 簡介 I...

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

    摘要:也正式因?yàn)轭惖姆瓷浜芏嗫蚣懿拍軐?shí)現(xiàn)依賴注入自動(dòng)解決類與類之間的依賴關(guān)系,這給我們平時(shí)的開發(fā)帶來了很大的方便。為了更好地理解,我們通過一個(gè)例子來看類的反射,以及如何實(shí)現(xiàn)依賴注入。反射出方法的參數(shù)其返回值為對(duì)象構(gòu)成的數(shù)組。 PHP具有完整的反射 API,提供了對(duì)類、接口、函數(shù)、方法和擴(kuò)展進(jìn)行逆向工程的能力。通過類的反射提供的能力我們能夠知道類是如何被定義的,它有什么屬性、什么方法、方法都有...

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

    摘要:現(xiàn)在我們就可以在構(gòu)造函數(shù)或者任何其他通過服務(wù)容器注入依賴項(xiàng)的地方使用類型提示注入接口創(chuàng)建一個(gè)新的類實(shí)例,此處將注入的實(shí)例。自動(dòng)解析構(gòu)造函數(shù)所需的依賴的服務(wù)容器實(shí)現(xiàn)了接口。 簡單的服務(wù)容器 一個(gè)簡單的 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)系,通過調(diào)整不同的注入對(duì)象,來控制程序的行為。例如類用到了,可以在不修改類代碼的情況下,改用。 依賴注入 傳統(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)論

閱讀需要支付1元查看
<