PHP簡單的IoC控制反轉實現_PHP教程

來源:互聯網
上載者:User
我們討論了關於IoC控制反轉的設計原則,現在我們用PHP來實現IoC設計原則,加深對這個概念的理解。

首先編寫 Fruit 的 POJO 和 Fruit 介面。繼承 Fruit 介面產生兩個類 Apple 和 Banana,這兩個類都實現了介面的 showColor() 方法。

Fruit.php

color;    }    function setColor($value){        $this->color=$value;    }        function showColor(){        echo "Apple Color:" . $this->color;    }}class Banana implements Fruit {    private  $color;    function getColor(){        return $this->color;    }    function setColor($value){        $this->color=$value;    }    function showColor(){        echo "Banana Color:" . $this->color;    }}?>

ClassFactory.php

類工廠實現了一些簡易功能,能夠解析指定的設定檔,並根據設定檔產生類,同時設定指定的屬性值:

","",$content);        //轉成數組        $this->arr_conf=json_decode($content,true);    }     function getBean($class_id){        //尋找匹配 $class_id 的類        while(true){            //挨個測試            $conf=each($this->arr_conf);            //找不到,返回 null            if($conf==false) return null;            if(strcmp($class_id,$conf["value"]["id"])===0){                //如果匹配則裝入類檔案                include_once($conf["value"]["class_file"]);                //產生類的執行個體                //print_r($conf["value"]["class_name"]);                $obj=new $conf["value"]["class_name"]();                //尋找被設定的屬性                $arr_prop=$conf["value"]["properties"];                while($prop=each($arr_prop)){                    //產生屬性的設定方法 setXXX ,第一個字母大寫                    $set_method="set". ucwords($prop["value"]["name"]);                    //調用設定方法,並設定預設值                    $obj->$set_method($prop["value"]["value"]);                }                //找到第一個,返回執行個體                return $obj;            }        }    }}?>

config.json

//備忘使用雙反斜杆[    {        //類ID,方便工廠尋找        "id": "Apple",        //類名        "class_name":"Apple",        //類檔案        "class_file":"Fruit.php",        //屬性設定        "properties":[            {                "name":"color",                "value":"Red"            }        ]    },    {        "id": "Banana",        "class_name":"Banana",        "class_file":"Fruit.php",        "properties":[            {                "name":"color",                "value":"Yellow"            }        ]    }]

test.php

為類工廠指定上述設定檔。我們可以看見,對設定檔裡的不同ID,返回了不同的類執行個體。調用每個執行個體的方法,分別輸出了Red和Yellow。可見,我們只需要改變更配置置檔案的內容,就可以返回不同的類執行個體,而不需修改程式原始碼。這就實現了簡單的 IOC 或者 DI。

getBean("Apple");echo $fruit->showColor() .'
';$fruit = $factory->getBean("Banana");echo $fruit->showColor() .'
';?>

PHP是動態語言,利用一些語言特性,實現起來很簡單,也沒用到反射之類的概念。

程式運行結果

Apple Color:RedBanana Color:Yellow

http://www.bkjia.com/PHPjc/752399.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/752399.htmlTechArticle我們討論了關於IoC控制反轉的設計原則,現在我們用PHP來實現IoC設計原則,加深對這個概念的理解。 首先編寫 Fruit 的 POJO 和 Fruit 介面。繼...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.