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

下載本文檔

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

文檔簡介

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

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

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

7、nts 關(guān)鍵字。一個類可以實現(xiàn)多個接口,這時,我們需要用逗號將他們隔開。假如將某個類標記為實現(xiàn)了某個接口,但卻沒有實現(xiàn)這個借口的全部方法,將會拋出錯誤。 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中的一個比較操作符。他接受左右兩邊的參數(shù),并返回一個boolean值。這個操作符是用來確定對象的某個實例是否為特定的類型,或者是否從某個類型繼承,又或者實現(xiàn)類某個特定的接口。 代碼如下: echo $porsche911 i

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

溫馨提示

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

評論

0/150

提交評論