国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

完整的PHP依賴倒置原則例程

Lyux / 3217人閱讀

摘要:設計模式中依賴倒置原則的定義是高層模塊不應該依賴低層模塊,二者都應該依賴其抽象抽象不應該依賴細節細節應該依賴抽象。像這樣,是無法真正體現依賴倒置原則的。

設計模式中依賴倒置原則(Dependence Inversion Principle)的定義是“高層模塊不應該依賴低層模塊,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。”理解起來并不難,但在具體實現上,網上給出的很多PHP示例都有缺陷。

就拿這篇文章來說,概念講的沒有問題,但在具體實現上,特別是代碼中有很多錯誤,不能體現PHP特色,比如PHP中應該用->而不是用.來調用方法,變量名應該帶$等很多錯誤,這就不說了,最關鍵的是即使把這些語法錯誤都改正,例子也不能說明原則,不夠有說服力。因為即使不加接口或抽象類,媽媽也一樣能給孩子講故事、讀報紙、讀雜志。

以下可運行代碼,沒有用到任何接口和抽象類,一樣可以實現功能,并且可擴展,不需要修改Mother類里的任何代碼,一樣可以輕松自如地讓媽媽讀各種讀物,無非就是在上面追加各種class,只要這個class里有getContent方法,媽媽全部可以識別:

getContent();
    }
}

class Client{
    public static function main(){
        $mother = new Mother();
        $mother->narrate(new Book());
        $mother->narrate(new Newspaper());
    }
}

Client::main();

既然如此隨意,還如何體現依賴倒置呢?這是因為PHP弱類型語言,特點就是不需要為變量指定類型,導致的結果就是只要你的class里有我需要調用的方法(在這里是getContent方法),那就無論如何也不會出錯,至于你是不是實現了什么interface接口,都無所謂的。像這樣,是無法真正體現依賴倒置原則的。那到底如何才能真正體現依賴倒置呢?秘訣就是我們通過使用PHP的類型約束來規定narrate函數的$book參數必須是一個接口:

class Mother{
    public function narrate(IReader $book){
        echo "媽媽開始講故事
";
        echo $book->getContent();
    }
}

在這里,我們規定了$book參數必須是一個IReader接口,那么凡是需要讓媽媽講的讀物都必須是對于IReader這個接口的一個實現,否則就會報錯。完整代碼如下:

getContent();
    }
}

class Client{
    public static function main(){
        $mother = new Mother();
        $mother->narrate(new Book());
        $mother->narrate(new Newspaper());
    }
}

$client = new Client();
$client->main();

你可以試著把class Newspaper后面的implements IReader去掉然后運行一下,馬上就會報錯:

PHP Fatal error:  Uncaught TypeError: Argument 1 passed to Mother::narrate() must implement interface IReader, instance of Newspaper given, called in /Users/zhangjing/Projects/phpdesignpattern/client.php on line 29 and defined in /Users/zhangjing/Projects/phpdesignpattern/client.php:19

所以結論是:對于PHP這種弱類型語言來講,要想真正實現依賴倒置原則,必須加上類型約束,否則實現的只是表象,并不能真正體現原則的作用。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/23320.html

相關文章

  • 面向對象基本原則(2)- 里式代換原則依賴倒置原則

    摘要:四依賴倒置原則依賴倒置原則簡介依賴倒置原則的英文名稱是,簡稱。依賴倒置原則的表現其實就是面向接口編程。依賴倒置原則的優點減少類間的耦合性,提高系統的穩定性。結合里氏替換原則使用接口負責定義屬性和方法,并且聲明與其他對象的依賴關系。 面向對象基本原則(2)- 里式代換原則與依賴倒置原則 面向對象基本原則(1)- 單一職責原則與接口隔離原則面向對象基本原則(2)- 里式代換原則與依賴倒置原...

    liangdas 評論0 收藏0
  • 設計模式六大原則PHP

    摘要:常用的六大設計模式有單一職責原則,里氏替換原則,依賴倒轉原則,接口隔離原則,迪米特法則,開閉原則。這六大原則是最虛,最抽象的,很難理解。這就是接口隔離原則。當我們遵循前面介紹的五大原則,以及使用種設計模式的目的就是遵循開閉原則。   設計模式的目的是為了更好的代碼重用性,可讀性,可靠性和可維護性。常用的六大設計模式有:單一職責原則(SRP),里氏替換原則(LSP),依賴倒轉原則(DIP...

    bluesky 評論0 收藏0
  • Laravel中核心概念

    摘要:可以為服務提供者的方法設置類型提示。方法將在所有其他服務提供者均已注冊之后調用。所有服務提供者都在配置文件中注冊。可以選擇推遲服務提供者的注冊,直到真正需要注冊綁定時,這樣可以提供應用程序的性能。 本文最早發布于 Rootrl的Blog 導言 Laravel是一款先進的現代化框架,里面有一些概念非常重要。在上手Laravel之前,我認為先弄懂這些概念是很有必要的。你甚至需要重溫下PHP...

    ddongjian0000 評論0 收藏0
  • 搞懂依賴注入, 用 PHP 手寫簡易 IOC 容器

    摘要:依賴注入控制反轉的一種具體實現方法。接下來,我們使用依賴注入實現控制反轉,使依賴關系倒置依賴被動傳入。從單元測試的角度看,依賴注入更方便和操作,方便了測試人員寫出質量更高的測試代碼。 前言 好的設計會提高程序的可復用性和可維護性,也間接的提高了開發人員的生產力。今天,我們就來說一下在很多框架中都使用的依賴注入。 一些概念 要搞清楚什么是依賴注入如何依賴注入,首先我們要明確一些概念。 D...

    antz 評論0 收藏0
  • PHP面向對象設計五大原則

    摘要:面向對象設計的五大原則單一職責原則接口隔離原則開放封閉原則替換原則依賴倒置原則。主要是針對繼承的設計原則,繼承與派生多態是的主要特性。 面向對象設計的五大原則:單一職責原則、接口隔離原則、開放-封閉原則、替換原則、依賴倒置原則。這些原則主要是由Robert C.Martin在《敏捷軟件開發——原則、方法、與實踐》一書中總結出來,這五大原則也是23種設計模式的基礎。 單一職責原則 Sin...

    adam1q84 評論0 收藏0

發表評論

0條評論

Lyux

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<