1. 程式人生 > 實用技巧 >理解PHP 依賴注入與容器

理解PHP 依賴注入與容器

<?php

//依賴注入與容器  
class Luntai{
    
    function roll(){
        echo "這是輪胎類::";
    }
}


class Bmw{

    protected $Luntai;
    //注入方式---建構函式注入,還可通過set方式注入
    function __construct($Luntai) {
        $this->Luntai = $Luntai;
    }

    function run() {
        $this->Luntai->roll(); //呼叫luntai類的 roll方法
        echo "這是寶馬的輪胎";
    }
}

//使用方法
/*$luntai = new Luntai();
$bmw = new Bmw($luntai);
$bmw->run();  //這是輪胎類::這是寶馬的輪胎
*/



/**
 * 容器
 */
class Container
{
    //存放所要繫結的類
    static $register = [];

    //繫結函式
    //closure 就是個閉包的型別
    static function bind($name, Closure $col) {
        //將鍵值對存到register中
        //鍵就是name 值就是col
        self::$register[$name] = $col;
    }

    //建立物件函式
    static function make($name){
        $col = self::$register[$name];
        return $col();
    }
}

//將要例項化的類,繫結到register中去。
//以後用到的時候只需要通過make方法獲取即可,不需要再重複例項化 ,類似於redis 鍵值對
Container::bind('luntai', function(){
    return new Luntai();
});

Container::bind('bmw', function(){
    return new Bmw(Container::make('luntai'));
});

$bmw = Container::make('bmw'); //根據鍵值呼叫bmw類,並使用其方法
$bmw->run();