站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        聊聊PHP面向對象設計的五個基準原則(S.O.L.I.D)

        本篇文章帶大家了解一下PHP面向對象設計的五個基準原則(S.O.L.I.D),希望對大家有所幫助!

        聊聊PHP面向對象設計的五個基準原則(S.O.L.I.D)

        前端(vue)入門到精通課程:進入學習

        S.O.L.I.D面向對象設計(OOD)的 5 個準則的首字母縮寫 ,這些準則是由 Robert C. Martin 提出的, 他更為人所熟知的名字是 Uncle Bob。

        這些準則使得開發(fā)出易擴展、可維護的軟件變得更容易。也使得代碼更精簡、易于重構。同樣也是敏捷開發(fā)和自適應軟件開發(fā)的一部分。

        備注: 這不是一篇簡單的介紹 “歡迎來到 _*S.O.L.I.D*” 的文章,這篇文章想要闡明 *S.O.L.I.D*** 是什么。

        S.O.L.I.D 意思是:

        擴展出來的首字母縮略詞看起來可能很復雜,實際上它們很容易理解。

        • S – 單一功能原則
        • O – 開閉原則
        • L – 里氏替換原則
        • I – 接口隔離原則
        • D – 依賴反轉原則

        接下來讓我們看看每個原則,來了解為什么 S.O.L.I.D 可以幫助我們成為更好的開發(fā)人員。

        單一職責原則

        縮寫是 S.R.P ,該原則內容是:

        一個類有且只能有一個因素使其改變,意思是一個類只應該有單一職責.

        例如,假設我們有一些圖形,并且想要計算這些圖形的總面積.是的,這很簡單對不對?

        class Circle {     public $radius;      public function __construct($radius) {         $this->radius = $radius;     } }  class Square {     public $length;      public function __construct($length) {         $this->length = $length;     } }

        首先,我們創(chuàng)建圖形類,該類的構造方法初始化必要的參數(shù).接下來,創(chuàng)建AreaCalculator 類,然后編寫計算指定圖形總面積的邏輯代碼.

        class AreaCalculator {      protected $shapes;      public function __construct($shapes = array()) {         $this->shapes = $shapes;     }      public function sum() {         // logic to sum the areas     }      public function output() {         return 'Sum of the areas of provided shapes: ' . $this->sum();     } }

        AreaCalculator 使用方法,我們只需簡單的實例化這個類,并且傳遞一個圖形數(shù)組,在頁面底部展示輸出內容.

        $shapes = array(     new Circle(2),     new Square(5),     new Square(6) );  $areas = new AreaCalculator($shapes);  echo $areas->output();

        輸出方法的問題在于,AreaCalculator 處理了數(shù)據(jù)輸出邏輯.因此,假如用戶希望將數(shù)據(jù)以 json 或者其他格式輸出呢?

        所有邏輯都由 AreaCalculator 類處理,這恰恰違反了單一職責原則(SRP); AreaCalculator 類應該只負責計算圖形的總面積,它不應該關心用戶是想要json還是HTML格式數(shù)據(jù)。

        因此,要解決這個問題,可以創(chuàng)建一個 SumCalculatorOutputter 類,并使用它來處理所需的顯示邏輯,以處理所有圖形的總面積該如何顯示。

        SumCalculatorOutputter 類的工作方式如下:

        $shapes = array(     new Circle(2),     new Square(5),     new Square(6) );  $areas = new AreaCalculator($shapes); $output = new SumCalculatorOutputter($areas);  echo $output->JSON(); echo $output->HAML(); echo $output->HTML(); echo $output->JADE();

        現(xiàn)在,無論你想向用戶輸出什么格式數(shù)據(jù),都由 SumCalculatorOutputter 類處理。

        開閉原則

        對象和實體應該對擴展開放,但是對修改關閉.

        簡單的說就是,一個類應該不用修改其自身就能很容易擴展其功能.讓我們看一下 AreaCalculator 類,特別是 sum 方法.

        public function sum() {     foreach($this->shapes as $shape) {         if(is_a($shape, 'Square')) {             $area[] = pow($shape->length, 2);         } else if(is_a($shape, 'Circle')) {             $area[] = pi() * pow($shape->radius, 2);         }     }      return array_sum($area); }

        如果我們想用 sum 方法能計算

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 久久99精品久久久久久秒播| 亚洲中文久久精品无码| 精品少妇一区二区三区在线| 精品无码人妻夜人多侵犯18| 国内精品久久久久久久影视麻豆| 国产精品国产精品国产专区不卡| 亚洲日韩精品无码一区二区三区 | 精品国产香蕉伊思人在线在线亚洲一区二区| 久久久久久九九99精品| 亚洲精品偷拍视频免费观看| 精品无码国产污污污免费网站国产 | 青青热久久国产久精品 | 成人精品综合免费视频| 老司机亚洲精品影院| 亚洲中文字幕久久精品无码APP| 欧美成人精品网站播放| 精品人妻系列无码人妻免费视频 | 免费人成在线观看欧美精品| 国内精品久久久久久久coent| A级毛片无码久久精品免费| 久久r热这里有精品视频| 久久精品国产91久久综合麻豆自制 | 99热亚洲精品6码| 亚洲精品免费观看| 四虎国产精品免费入口| 日本久久久精品中文字幕| 九九在线精品视频专区| 国产午夜精品视频| 国产在线不卡午夜精品2021| 国产精品久久久久久久久鸭| 99re热这里只有精品视频中文字幕| 成人区人妻精品一区二区不卡网站 | 人人妻人人澡人人爽人人精品| 亚洲日韩精品一区二区三区| 亚洲精品国产首次亮相| 午夜精品久久久久久久久| 亚洲日韩一页精品发布| 久久99精品久久久久久hb无码| 精品视频无码一区二区三区| 99精品国产一区二区三区2021 | 国产精品女同一区二区久久 |