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

資訊專(zhuān)欄INFORMATION COLUMN

PHP設(shè)計(jì)模式(三):封裝

dongxiawu / 2548人閱讀

摘要:原文地址設(shè)計(jì)模式三封裝面向?qū)ο缶幊讨校磺卸际菍?duì)象,對(duì)一個(gè)對(duì)象的封裝,也成了面向?qū)ο缶幊讨斜夭豢缮俚牟糠帧7庋b方法和別的程序設(shè)計(jì)語(yǔ)言一樣,也只是三種封裝概念,,。直接訪問(wèn)和修改破壞了類(lèi)的封裝性。

原文地址:PHP設(shè)計(jì)模式(三):封裝

Introduction

面向?qū)ο缶幊讨校磺卸际菍?duì)象,對(duì)一個(gè)對(duì)象的封裝,也成了面向?qū)ο缶幊讨斜夭豢缮俚牟糠帧?br>和C/C++,Java,Python等語(yǔ)言一樣,PHP也支持封裝。

封裝/Encapsulation

對(duì)事物的封裝是指,將事物進(jìn)行抽象后,提供抽象概念的實(shí)現(xiàn)的具體方法。

聽(tīng)起來(lái)很拗口,還是舉鯨魚(yú)的例子。
對(duì)于鯨魚(yú)來(lái)說(shuō),需要吃東西這個(gè)行為,吃本身是一個(gè)抽象的概念,因?yàn)榫唧w到怎么吃,是咀嚼和消化的過(guò)程,甚至如何咀嚼和消化也是不可見(jiàn)的。對(duì)外部而言,可見(jiàn)的只是吃這一個(gè)接口,如何吃、怎么吃,是被封裝在了鯨魚(yú)的實(shí)現(xiàn)中。
甚至可以說(shuō),消化系統(tǒng),被封裝到了鯨魚(yú)這個(gè)對(duì)象中,對(duì)外部不可見(jiàn),僅僅鯨魚(yú)自己可見(jiàn)。

封裝方法

和別的程序設(shè)計(jì)語(yǔ)言一樣,PHP也只是三種封裝概念:Private,Protected,Public。

私有/Private

私有的概念是,僅僅對(duì)象內(nèi)部可見(jiàn),外部不可見(jiàn),如:

name = "Whale";
  }
  public function eat($food) {
    chew($food);
    digest($food);
  }
  private function chew($food) {
    echo "Chewing " . $food . "
";
  }
  private function digest($food) {
    echo "Digest " . $food . "
";
  }
}
?>

name是鯨魚(yú)的私有屬性,chew()和digest()是鯨魚(yú)的私有方法,對(duì)于其他類(lèi)來(lái)說(shuō),都是不可見(jiàn)的。對(duì)于現(xiàn)實(shí)來(lái)說(shuō),我們?nèi)绻皇亲⒅爻裕](méi)有必要去關(guān)心鯨魚(yú)是如何去吃的。

保護(hù)/Protected

保護(hù)的概念是,僅僅是自身類(lèi)和繼承類(lèi)可見(jiàn),這個(gè)關(guān)鍵字的用途主要是防止濫用類(lèi)的派生,另外三方庫(kù)編寫(xiě)的時(shí)候會(huì)用到,防止誤用。

name = "Whale";
  }
  public function eat($food) {
    chew($food);
    digest($food);
  }
}
?>

鯨魚(yú)類(lèi)可以通過(guò)繼承使用動(dòng)物類(lèi)的咀嚼和消化方法,但是別的繼承鯨魚(yú)類(lèi)的類(lèi)就不可以再使用動(dòng)物類(lèi)的咀嚼和消化方法了。保護(hù)更多是用于面向?qū)ο笤O(shè)計(jì),而不是為了編程來(lái)實(shí)現(xiàn)某個(gè)需求。

公共/Public

公共的概念就是,任何類(lèi)、任何事物都可以訪問(wèn),沒(méi)有任何限制,這里不再贅述。

Getters/Setters

Getters和Setters也叫Accessors和Mutators,在Java/C#等語(yǔ)言中常以get()/set()方法出現(xiàn)。
對(duì)于這兩個(gè)東西的爭(zhēng)議很大,考慮下面一個(gè)類(lèi):

如果不使用Getters/Setters,我們給Price類(lèi)賦值和取值一般是這樣:

priceA = 1;
  $price->priceB = 2;
  $price->priceC = 3;
  ...
  echo $price->priceA;
  echo $price->priceB;
  echo $price->priceC;
  ...
?>

但是如果使用了Getters/Setters,Price類(lèi)將變成這樣:

priceA;
  }
  public function setPriceA($price) {
    $this->priceA = $price;
  }
  ...
}
?>

這時(shí)候賦值將變成這樣:

setpriceA(1);
  $price->setPriceB(2);
  $price->setPriceC(3);
  ...
  echo $price->getPriceA();
  echo $price->getPriceB();
  echo $price->getPriceC();
  ...
?>

是不是感覺(jué)需要多敲很多代碼?這也是很多程序員不愿意使用get/set的原因,造成了大量的看似無(wú)用冗余的代碼。
為什么叫看似冗余和無(wú)用?因?yàn)镚etters/Setters是編程設(shè)計(jì)方法,而不是編程實(shí)現(xiàn)方法。

在面向?qū)ο蟪绦蛟O(shè)計(jì)中,類(lèi)和類(lèi)之間的訪問(wèn)、交互和更新應(yīng)該是通過(guò)Accessors和Mutators,也就是Getters和Setters來(lái)實(shí)現(xiàn)。直接訪問(wèn)和修改破壞了類(lèi)的封裝性。

為什么采用這種設(shè)計(jì)方式?因?yàn)槌绦蛟O(shè)計(jì)是對(duì)現(xiàn)實(shí)問(wèn)題的抽象,而在編程的工程中程序員扮演的角色往往是上帝。
考慮這樣一種場(chǎng)景:你朋友要求你改名,決定是否改名的人是你,而不是你朋友。在你的朋友的視覺(jué)(也就是你朋友的類(lèi)),他不能直接去修改你的名字。
如果你直接采用非Getters/Setters的設(shè)計(jì)方法,事實(shí)上是程序員扮演的這個(gè)上帝修改了現(xiàn)實(shí)規(guī)則,允許你朋友能夠隨意更改你的姓名,顯然這是不合理的。

Summary

合理的封裝對(duì)于好的程序設(shè)計(jì)是必不可少的,雖然什么都是Public也能解決編程問(wèn)題,但是這不是用程序設(shè)計(jì)解決問(wèn)題的思路。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/21510.html

相關(guān)文章

  • PHP面試之面向?qū)ο螅?)

    摘要:二面向?qū)ο笥惺裁刺卣髅嫦驅(qū)ο蟮闹饕卣饔谐橄罄^承封裝和多態(tài)。析構(gòu)函數(shù)析構(gòu)函數(shù)是在引入的,它的作用與調(diào)用時(shí)機(jī)和構(gòu)造函數(shù)剛好相反,它在對(duì)象被銷(xiāo)毀時(shí)自動(dòng)執(zhí)行。 PHP面試專(zhuān)欄正式起更,每周一、三、五更新,提供最好最優(yōu)質(zhì)的PHP面試內(nèi)容。PHP中面向?qū)ο蟪?嫉闹R(shí)點(diǎn)有以下7點(diǎn),我將會(huì)從以下幾點(diǎn)進(jìn)行詳細(xì)介紹說(shuō)明,幫助你更好的應(yīng)對(duì)PHP面試常考的面向?qū)ο笙嚓P(guān)的知識(shí)點(diǎn)和考題。整個(gè)面向?qū)ο笪恼碌慕Y(jié)構(gòu)涉...

    phodal 評(píng)論0 收藏0
  • 基于 Laravel Route 的 社交系統(tǒng)ThinkSNS+ Component【研發(fā)日記系列

    摘要:在社交系統(tǒng)中有這樣一個(gè)命令主要是用作包的安裝,升級(jí),卸載。這在開(kāi)發(fā)過(guò)程中很有用。內(nèi)測(cè)申請(qǐng)方式提供個(gè)人企業(yè)聯(lián)系方式及認(rèn)證信息實(shí)名企業(yè)營(yíng)業(yè)執(zhí)照照片或掃描件及申請(qǐng)說(shuō)明,發(fā)送郵件至將有機(jī)會(huì)獲得首批內(nèi)測(cè)資格,名額有限,申請(qǐng)從速。 在前面,我介紹了拓展類(lèi)型,分別有 plus-compnent 和 plus-plugin 兩個(gè),這里重點(diǎn)講以下如何實(shí)現(xiàn) plus-component 的。 plus-c...

    pf_miles 評(píng)論0 收藏0
  • 各開(kāi)源框架使用與設(shè)計(jì)總結(jié)(

    摘要:總結(jié)了框架與架構(gòu)的區(qū)別。站在框架之外,看框架,看框架的共同特征與功用。由于框架所帶來(lái)的問(wèn)題,以性能可擴(kuò)展問(wèn)題,相對(duì)嚴(yán)重,所以分析性能的改造方向,總結(jié)了六大點(diǎn)。包括框架介紹,的使用,以及。 六、各項(xiàng)實(shí)踐,性能評(píng)測(cè) 下面進(jìn)入性能評(píng)測(cè),評(píng)測(cè)我們相對(duì)就比較快速一些。直接用ab命令,來(lái)測(cè)試上面的所提及的一些改進(jìn)。 以下評(píng)測(cè),所有測(cè)試頁(yè)面,均為:http://hjvote.app.ucai.cn/...

    objc94 評(píng)論0 收藏0
  • PHP設(shè)計(jì)模式(二)工廠方法模式(Factory Method)

    摘要:對(duì)于這個(gè)問(wèn)題,接下來(lái)的工廠方法模式可以解決這個(gè)問(wèn)題。二工廠方法模式的優(yōu)點(diǎn)擁有良好的封裝性,代碼結(jié)構(gòu)清晰。參考系列源地址系列目錄設(shè)計(jì)模式概述設(shè)計(jì)模式一簡(jiǎn)單工廠模式設(shè)計(jì)模式二工廠方法模式設(shè)計(jì)模式三抽象工廠模式設(shè)計(jì)模式四單例模式 簡(jiǎn)單工廠簡(jiǎn)述: 簡(jiǎn)單工廠模式實(shí)現(xiàn)了產(chǎn)品類(lèi)的代碼跟客戶(hù)端代碼分離,但會(huì)有一個(gè)問(wèn)題,優(yōu)秀的代碼是符合開(kāi)閉原則如果你要加一個(gè)C類(lèi)產(chǎn)品,你就要修改工廠類(lèi)里面的代碼,也就是說(shuō)...

    zhjx922 評(píng)論0 收藏0
  • polarphp:一個(gè)新的 PHP 語(yǔ)言運(yùn)行時(shí)環(huán)境

    摘要:項(xiàng)目介紹是一個(gè)全新的語(yǔ)言的運(yùn)行時(shí)環(huán)境,基于目前最新的進(jìn)行打造,支持最新的語(yǔ)言規(guī)范,同時(shí)提供了自己的運(yùn)行時(shí)標(biāo)準(zhǔn)庫(kù)。同樣也在的基礎(chǔ)上進(jìn)行打造,實(shí)現(xiàn)了一個(gè)除開(kāi)發(fā)之外的一個(gè)全新的運(yùn)行環(huán)境。發(fā)布核心虛擬機(jī)的鏡像。整合運(yùn)行時(shí)框架。 showImg(https://segmentfault.com/img/bVbnQXK); polarphp 項(xiàng)目介紹 polarphp是一個(gè)全新的PHP語(yǔ)言的運(yùn)行時(shí)...

    宋華 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<