php opp機(jī)制和模式簡(jiǎn)介(抽象類、接口和契約式編程)__第1頁(yè)
php opp機(jī)制和模式簡(jiǎn)介(抽象類、接口和契約式編程)__第2頁(yè)
php opp機(jī)制和模式簡(jiǎn)介(抽象類、接口和契約式編程)__第3頁(yè)
php opp機(jī)制和模式簡(jiǎn)介(抽象類、接口和契約式編程)__第4頁(yè)
php opp機(jī)制和模式簡(jiǎn)介(抽象類、接口和契約式編程)__第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、php opp機(jī)制和模式簡(jiǎn)介(抽象類、接口和契約式編程)_ 1.抽象類 抽象類機(jī)制中總是要定義一個(gè)公共的基類,而將特定的詳情留給繼承者來(lái)實(shí)現(xiàn)。通過(guò)抽象概念,可以在開(kāi)發(fā)項(xiàng)目中創(chuàng)建擴(kuò)展性很好的架構(gòu)。任何一個(gè)類,假如它里面至少有一個(gè)方法是被聲明為抽象的,那么這個(gè)類就必需被聲明為抽象的。被定義為抽象的方法只是聲明白其調(diào)用方式(參數(shù)),不能定義其具體的功能實(shí)現(xiàn)。在類的聲明中用法 abstract 修飾符就可以將某個(gè)類聲明為抽象的。 1.1方法原型(prototype) 是指方法的定義中剔除了方法體之后的簽名。它包括存取級(jí)別、函數(shù)關(guān)鍵字、函數(shù)名稱和參數(shù)。他不包含()或者括號(hào)內(nèi)部的任何代碼。例如下面的代碼就

2、是一個(gè)方法原型: 代碼如下: public function prototypename($protoparam) 繼承一個(gè)抽象類的時(shí)候,子類必需定義父類中的全部抽象方法;另外,這些方法的訪問(wèn)掌握必需和父類中一樣(或者更為寬松)。 1.2關(guān)于抽象類 某個(gè)類只要包含至少一個(gè)抽象方法就必需聲明為抽象類 聲明為抽象的方法,在實(shí)現(xiàn)的時(shí)候必需包含相同的或者更低的訪問(wèn)級(jí)別。 不能用法 new 關(guān)鍵字創(chuàng)建抽象類的實(shí)例。 被生命為抽象的方法不能包含函數(shù)體。 假如將擴(kuò)展的類也聲明為抽象類,在擴(kuò)展抽象類時(shí),可以不用實(shí)現(xiàn)全部的抽象方法。(假如某個(gè)類從抽象類繼承,當(dāng)它沒(méi)有實(shí)現(xiàn)基類中所聲明的全部抽象方法時(shí),它就必需也被

3、聲明為抽象的。) 1.3用法抽象類 代碼如下: ?php abstract class car abstract function getmaxspeend(); class roadster extends car public $speend; public function setspeend($speend = 0) $this-speend = $speend; public function getmaxspeend() return $this-speend; class street public $cars ; public $speendlimit ; function _

4、construct( $speendlimit = 200) $this - speendlimit = $speendlimit; $this - cars = array(); protected function isstreetlegal($car) if ($car-getmaxspeend() $this - speendlimit) return true; else return false; public function addcar($car) if($this-isstreetlegal($car) echo the car was allowed on the roa

5、d.; $this-cars = $car; else echo the car is too fast and was not allowed on the road.; $porsche911 = new roadster(); $porsche911-setspeend(340); $fuwaistreet = new street(80); $fuwaistreet-addcar($porsche911); /* * * result * * the car is too fast and was not allowed on the road.finished in 0.1s * *

6、/ ? 2.對(duì)象接口 用法接口(interface),可以指定某個(gè)類必需實(shí)現(xiàn)哪些方法,但不需要定義這些方法的具體內(nèi)容。 接口是通過(guò) interface 關(guān)鍵字來(lái)定義的,就像定義一個(gè)標(biāo)準(zhǔn)的類一樣,但其中定義全部的方法都是空的。 接口中定義的全部方法都必需是公有,這是接口的特性。 接口是一種類似于類的結(jié)構(gòu),可用于聲明實(shí)現(xiàn)類所必需聲明的方法。例如,接口通常用來(lái)聲明api,而不用定義如何實(shí)現(xiàn)這個(gè)api。 大多數(shù)開(kāi)發(fā)人員選擇在接口名稱前加上大寫(xiě)字母i作為前綴,以便在代碼和生成的文檔中將其與類區(qū)分開(kāi)來(lái)。 2.1用法接口 和集成抽象類需要用法 extends 關(guān)鍵字不同的是,實(shí)現(xiàn)接口用法的是 impleme

7、nts 關(guān)鍵字。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,這時(shí),我們需要用逗號(hào)將他們隔開(kāi)。假如將某個(gè)類標(biāo)記為實(shí)現(xiàn)了某個(gè)接口,但卻沒(méi)有實(shí)現(xiàn)這個(gè)借口的全部方法,將會(huì)拋出錯(cuò)誤。 2.2用法接口的案例 代碼如下: ?php abstract class car abstract function setspeend($speend = 0); interface ispeendinfo function getmaxspeend(); class roadster extends car implements ispeendinfo public $speend; public function setspeend($

8、speend = 0) $this-speend = $speend; public function getmaxspeend() return $this-speend; class street public $cars ; public $speendlimit ; function _construct( $speendlimit = 200) $this - speendlimit = $speendlimit; $this - cars = array(); protected function isstreetlegal($car) if ($car-getmaxspeend(

9、) $this - speendlimit) return true; else return false; public function addcar($car) if($this-isstreetlegal($car) echo the car was allowed on the road.; $this-cars = $car; else echo the car is too fast and was not allowed on the road.; $porsche911 = new roadster(); $porsche911-setspeend(340); $fuwais

10、treet = new street(80); $fuwaistreet-addcar($porsche911); /* * * result * * the car is too fast and was not allowed on the road.finished in 0.1s * */ ? 3.instanceof 操作符 instanceof 操作符是php5中的一個(gè)比較操作符。他接受左右兩邊的參數(shù),并返回一個(gè)boolean值。這個(gè)操作符是用來(lái)確定對(duì)象的某個(gè)實(shí)例是否為特定的類型,或者是否從某個(gè)類型繼承,又或者實(shí)現(xiàn)類某個(gè)特定的接口。 代碼如下: echo $porsche911 i

11、nstanceof car; /result:1 echo $porsche911 instanceof ispeendinfo; /result:1 4.契約式編程 契約式編程是指在編寫(xiě)類之前實(shí)現(xiàn)聲明接口的一種編程實(shí)踐。這種方法在保證類的封裝性方面特別有用。用法契約式編程技術(shù),我們可以在創(chuàng)建應(yīng)用程序之前定義出視圖實(shí)現(xiàn)的功能,這和建筑師在修建大樓之前先畫(huà)好藍(lán)圖的做法特別相像。 5.總結(jié) 抽象類是用法 abstract 關(guān)鍵字聲明的類。通過(guò)將某個(gè)類標(biāo)記為抽象類,我們可以推遲實(shí)現(xiàn)所聲明的方法。要將某個(gè)方法聲明為抽象方法,只要去掉包含全部大括號(hào)的方法實(shí)體,將方法聲明的代碼行用分號(hào)結(jié)束即可。 抽象類不能挺直實(shí)例化,他們必需被繼承。 假如某個(gè)類從抽象類繼承,當(dāng)它沒(méi)有實(shí)現(xiàn)基類中所聲明的全部抽象方法時(shí),它就必需也被聲明為抽象的。 在接口中,我們可以聲明沒(méi)有方法體的方法原型,這點(diǎn)與抽象類很相像。他們之間的區(qū)分在于,接口不能聲明任何具有方法體的方法;并且他們用法的語(yǔ)法也不一樣。為了將揭開(kāi)規(guī)章強(qiáng)制加到某個(gè)類上,我們需要用法implements關(guān)鍵字,而不是extends關(guān)鍵字。 有些狀況下我們需要確定某個(gè)類是否是特定類的類型,或者是否實(shí)現(xiàn)了特定的接口。 instanceof 分成適合完成這個(gè)任務(wù)。in

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論