最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP面向?qū)ο笪宕笤瓌t之里氏替換原則(LSP)詳解

 更新時(shí)間:2018年04月08日 08:55:40   作者:雪山飛豬  
這篇文章主要介紹了PHP面向?qū)ο笪宕笤瓌t之里氏替換原則(LSP),較為詳細(xì)的分析了里氏替換原則(LSP)的概念、原理并結(jié)合實(shí)例形式分析了php里氏替換原則(LSP)的簡(jiǎn)單使用方法,需要的朋友可以參考下

本文實(shí)例講述了PHP面向?qū)ο笪宕笤瓌t之里氏替換原則(LSP)。分享給大家供大家參考,具體如下:

替換原則由MIT計(jì)算機(jī)科學(xué)實(shí)驗(yàn)室的Liskov女士在1987年的OOPSLA大會(huì)上的一篇文章中提出,主要闡述有關(guān)繼承的一些原則,故稱(chēng)里氏替換原則。

2002年,Robert C.Martin出版了一本名為《Agile Software Development Principles Patterns and Practices》的書(shū),在書(shū)中他把里氏替換原則最終簡(jiǎn)化成一句話(huà):“Subtypes must be substitutable for their base types”(子類(lèi)必須能夠替換成它們的基類(lèi)。)

1. LSP的內(nèi)容

里氏替換原則(Liskov Substitution Principle, LSP)的定義和主要思想如下:由于面向?qū)ο缶幊碳夹g(shù)中的繼承在具體的編程中過(guò)于簡(jiǎn)單,在許多系統(tǒng)的設(shè)計(jì)和編程實(shí)現(xiàn)中,我們并沒(méi)有認(rèn)真地、理性地思考應(yīng)用系統(tǒng)中各個(gè)類(lèi)之間的繼承關(guān)系是否合適,派生類(lèi)是否能正確地對(duì)其基類(lèi)中的某些方法進(jìn)行重寫(xiě)等問(wèn)題。因此經(jīng)常出現(xiàn)濫用繼承或者錯(cuò)誤地進(jìn)行了繼承等現(xiàn)象,給系統(tǒng)的后期維護(hù)帶來(lái)了不少麻煩。這就需要我們有一個(gè)設(shè)計(jì)原則來(lái)遵循,它就是替換原則。

LSP指出:子類(lèi)類(lèi)型必須能夠替換掉它們的父類(lèi)型、并出現(xiàn)在父類(lèi)能夠出現(xiàn)的任何地方。它指導(dǎo)我們?nèi)绾握_地進(jìn)行繼承和派生,并合理地重用代碼。此原則認(rèn)為,一個(gè)軟件實(shí)體如果使用一個(gè)基類(lèi)的話(huà),那么一定適用于其子類(lèi),而且這根本不能察覺(jué)出基類(lèi)對(duì)象和子類(lèi)對(duì)象的區(qū)別。想一想,是不是和多態(tài)的概念比較像?

2. LSP主要是針對(duì)繼承的設(shè)計(jì)原則

因?yàn)槔^承與派生是OOP的一個(gè)主要特性,能夠減少代碼的重復(fù)編程實(shí)現(xiàn),從而實(shí)現(xiàn)系統(tǒng)中的代碼復(fù)用,但是如何正確地進(jìn)行繼承設(shè)計(jì)和合理地應(yīng)用繼承機(jī)制呢?

這就是LSP所要解決的問(wèn)題:

如何正確地進(jìn)行繼承方面的設(shè)計(jì)?

最佳的繼承層次如何獲得?

怎么樣避免所設(shè)計(jì)的類(lèi)層次陷入不符合OCP原則的狀況?

那如何遵守該設(shè)計(jì)原則呢?

1)父類(lèi)的方法都要在子類(lèi)中實(shí)現(xiàn)或者重寫(xiě),并且派生類(lèi)只實(shí)現(xiàn)其抽象類(lèi)中聲明的方法,而不應(yīng)當(dāng)給出多余的方法定義或?qū)崿F(xiàn)

2)在客戶(hù)端程序中只應(yīng)該使用父類(lèi)對(duì)象而不應(yīng)當(dāng)直接使用子類(lèi)對(duì)象,這樣可以實(shí)現(xiàn)運(yùn)行期綁定(動(dòng)態(tài)多態(tài))。

如果A、B兩個(gè)類(lèi)違反了LSP的設(shè)計(jì),通常的做法是創(chuàng)建一個(gè)新的抽象類(lèi)C,作為兩個(gè)具體類(lèi)的超類(lèi),獎(jiǎng)A和B的共同行為移動(dòng)到C中,從而解決A和B的行為不完全一致的問(wèn)題。

不過(guò)PHP對(duì)LSP的支持并不好,缺乏向上轉(zhuǎn)型等概念,只能通過(guò)一些曲折的方法實(shí)現(xiàn)。對(duì)于這個(gè)原則,這里就不細(xì)講了。

下面給出一個(gè)緩存的實(shí)現(xiàn)接口,用抽象類(lèi)做基類(lèi),遵循LSP實(shí)現(xiàn)其設(shè)計(jì)。

<?php
abstract class Cache
{
 /**
  * 設(shè)置一個(gè)緩存變量
  * @param $key 緩存key
  * @param $value 緩存內(nèi)容
  * @param int $expire 緩存時(shí)間(秒)
  * @return boolean 是否緩存成功
  */
 public abstract function set($key, $value, $expire = 60);
 /**
  * 獲取一個(gè)已經(jīng)緩存的
  * @param $key 緩存key
  * @return mixed 緩存內(nèi)容
  */
 public abstract function get($key);
 /**
  * 刪除一個(gè)已經(jīng)緩存的變量
  * @param $key 緩存key
  * @return boolean 是否刪除成功
  */
 public abstract function del($key);
 /**
  * 刪除全部緩存變量
  * @return boolean 是否刪除成功
  */
 public abstract function delAll();
 /**
  * 檢測(cè)是否存在對(duì)應(yīng)的緩存
  * @param $key 緩存key
  * @return boolean 是否存在
  */
 public abstract function has($key);
}

如果現(xiàn)在要求實(shí)現(xiàn)文件、memcache、accelerator等各種機(jī)制下的緩存,只需要繼承這個(gè)抽象類(lèi)并實(shí)現(xiàn)其抽象方法即可。

LSP中代碼的不僅僅是功能,還名手語(yǔ)意。試思考:白馬可以代換馬,而牛同樣作為勞動(dòng)力,可代換馬否?高跟鞋也是鞋子,男人穿高跟鞋又是否能接受?

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門(mén)教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • PHP數(shù)組循環(huán)操作詳細(xì)介紹 附實(shí)例代碼

    PHP數(shù)組循環(huán)操作詳細(xì)介紹 附實(shí)例代碼

    PHP數(shù)組循環(huán)操作主要有兩種方式:一種是foreach,另一種是while,文章有詳細(xì)的介紹,希望對(duì)大家有幫助
    2013-02-02
  • mod_php、FastCGI、PHP-FPM等PHP運(yùn)行方式對(duì)比

    mod_php、FastCGI、PHP-FPM等PHP運(yùn)行方式對(duì)比

    這篇文章主要介紹了mod_php、FastCGI、PHP-FPM等PHP運(yùn)行方式對(duì)比,本文講解了什么是PHP處理器(PHP handlers)、mod_php的優(yōu)缺點(diǎn)、FastCGI的優(yōu)缺點(diǎn)、PHP-FPM(FastCGI Process Manager)的優(yōu)缺點(diǎn)等內(nèi)容,需要的朋友可以參考下
    2015-07-07
  • 深入PHP中的HashTable結(jié)構(gòu)詳解

    深入PHP中的HashTable結(jié)構(gòu)詳解

    本篇文章是對(duì)PHP中的HashTable結(jié)構(gòu)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php rsa 加密,解密,簽名,驗(yàn)簽詳解

    php rsa 加密,解密,簽名,驗(yàn)簽詳解

    這篇文章主要介紹了php rsa 加密,解密,簽名,驗(yàn)簽詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • 使用PHP計(jì)算兩個(gè)路徑的相對(duì)路徑

    使用PHP計(jì)算兩個(gè)路徑的相對(duì)路徑

    本篇文章是對(duì)用PHP計(jì)算兩個(gè)路徑的相對(duì)路徑進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 10個(gè)超級(jí)有用值得收藏的PHP代碼片段

    10個(gè)超級(jí)有用值得收藏的PHP代碼片段

    這篇文章主要介紹了10個(gè)超級(jí)有用值得收藏的PHP代碼片段,本文講解了黑名單過(guò)濾、隨機(jī)顏色生成器、從網(wǎng)絡(luò)下載文件、強(qiáng)制下載文件、通過(guò)Email顯示用戶(hù)的Gravatar頭像等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • 最新評(píng)論

    镇坪县| 壤塘县| 乌拉特后旗| 张家口市| 新乡市| 嘉善县| 湛江市| 奉化市| 津南区| 政和县| 三明市| 灵山县| 合作市| 大宁县| 禹州市| 光泽县| 商都县| 新河县| 盈江县| 四川省| 泗水县| 海伦市| 洛川县| 茂名市| 读书| 乐山市| 莒南县| 芮城县| 铜梁县| 丁青县| 鄂托克前旗| 宣汉县| 大关县| 察隅县| 渝中区| 衡南县| 乌鲁木齐县| 博白县| 彭泽县| 新干县| 祁东县|