面向?qū)ο笤O(shè)計(jì)_第1頁(yè)
面向?qū)ο笤O(shè)計(jì)_第2頁(yè)
面向?qū)ο笤O(shè)計(jì)_第3頁(yè)
面向?qū)ο笤O(shè)計(jì)_第4頁(yè)
面向?qū)ο笤O(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(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)介

PHP面向?qū)ο蟮脑O(shè)計(jì)05主講:郵箱:微博:課前復(fù)習(xí)類的封裝封裝后屬性和方法的訪問(wèn)魔術(shù)方法:__set()、__get()、__isset()、__unset()的使用預(yù)習(xí)檢查類的繼承?本章任務(wù)1.面向?qū)ο蟮慕榻B2.如何抽象一個(gè)類3.通過(guò)類實(shí)例化對(duì)象4.封裝性5.繼承性6.常見(jiàn)的關(guān)鍵字和魔術(shù)方法7.抽象類與接口8.多態(tài)性的應(yīng)用9.命名空間7.抽象類與接口7.1抽象方法和抽象類7.2接口技術(shù)7.1抽象方法和抽象類在OOP語(yǔ)言中,一個(gè)類可以有一個(gè)或多個(gè)子類,而每個(gè)類都有至少一個(gè)公有方法做為外部代碼訪問(wèn)其的接口。而抽象方法就是為了方便繼承而引入的。當(dāng)類中有一個(gè)方法,他沒(méi)有方法體,也就是沒(méi)有花括號(hào),直接分號(hào)結(jié)束,象這種方法我們叫抽象方法,必須使用關(guān)鍵字abstract定義。如:publicabstractfunctionfun();包含這種方法的類必須是抽象類也要使用關(guān)鍵字abstract加以聲明。(即使用關(guān)鍵字abstract修飾的類為抽象類)抽象類的特點(diǎn):不能實(shí)例化,也就new成對(duì)象若想使用抽象類,就必須定義一個(gè)類去繼承這個(gè)抽象類,并定義覆蓋父類的抽象方法(實(shí)現(xiàn)抽象方法)。其實(shí)抽象類對(duì)于子類(實(shí)現(xiàn)類),有一個(gè)約束的作用,含有抽象方法的類肯定是抽象類,但是不是所有的抽象類都必須包含抽象方法。<?php

//聲明一個(gè)抽象類,要使用abstract關(guān)鍵字標(biāo)識(shí)

abstract

classPerson{

protected

$name;

//聲明一個(gè)存儲(chǔ)人的名字的成員

protected

$country;

//聲明一個(gè)存儲(chǔ)人的國(guó)家的成員

pubicfunction__construct($name="",

$country="china")

{

$this->name=

$name;

$this->country=

$country;

}

//在抽象類中聲明一個(gè)沒(méi)有方法體的抽象方法,使用abstract關(guān)鍵字標(biāo)識(shí)

publicabstract

functionsay();

//在抽象類中聲明另一個(gè)沒(méi)有方法體的抽象方法,使用abstract關(guān)鍵字標(biāo)識(shí)

publicabstract

functioneat();

//在抽象類中可以聲明正常的非抽象的方法

publicfunctionrun(){

echo

"使用兩條腿走路<br>";

//有方法體,輸出一條語(yǔ)句

}

}<?php

//聲明一個(gè)類去繼承抽象類Person

classChineseManextendsPerson{

//將父類中的抽象方法覆蓋,按自己的需求去實(shí)現(xiàn)

publicfunctionsay()

{

echo

$this->name."是".$this->country."人,講漢語(yǔ)<br>";

//實(shí)現(xiàn)的內(nèi)容

}

//將父類中的抽象方法覆蓋,按自己的需求去實(shí)現(xiàn)

publicfunctioneat()

{

echo

$this->name."使用筷子吃飯<br>";

//實(shí)現(xiàn)的內(nèi)容

}

}

//聲明另一個(gè)類去繼承抽象類Person

classAmericansextendsPerson{

//此處省略.......

}

$chineseMan

=

newChineseMan("高洛峰",

"中國(guó)");

//將第一個(gè)Person的子類實(shí)例化對(duì)象

$americans

=

newAmericans("alex",

"美國(guó)");

//將第二個(gè)Person的子類實(shí)例化對(duì)象

$chineseMan

->say();

//通過(guò)第一個(gè)對(duì)象調(diào)用子類中已經(jīng)實(shí)例父類中抽象方法的say()方法

$chineseMan

->eat();

//通過(guò)第一個(gè)對(duì)象調(diào)用子類中已經(jīng)實(shí)例父類中抽象方法的eat()方法

$americans

->say();

//通過(guò)第二個(gè)對(duì)象調(diào)用子類中已經(jīng)實(shí)例父類中抽象方法的say()方法

$americans

->eat();

//通過(guò)第二個(gè)對(duì)象調(diào)用子類中已經(jīng)實(shí)例父類中抽象方法的eat()方法7.2接口技術(shù)PHP與大多數(shù)面向?qū)ο缶幊陶Z(yǔ)言一樣,不支持多重繼承,也就是說(shuō)每個(gè)類只能繼承一個(gè)父類。為了解決這個(gè)這個(gè)問(wèn)題,PHP引入了接口,接口的思想是指定了一個(gè)實(shí)現(xiàn)了該接口的類必須實(shí)現(xiàn)的一系列函數(shù)。如果在一個(gè)抽象類中包含的只有抽象方法,可以將其定義為interface(接口),用implements(實(shí)現(xiàn))關(guān)鍵字使用它。

定義格式:

interface接口名稱{

//常量成員(使用const關(guān)鍵字定義) //抽象方法(不需要使用abstract關(guān)鍵字) }

使用格式:class類名implements接口名1,接口名2{......}

當(dāng)一個(gè)類在繼承了一個(gè)接口后,它必須實(shí)現(xiàn)即覆蓋該接口的所有方法才可以實(shí)例化使用,否則即為抽象類。<?php

//聲明一個(gè)接口使用interface關(guān)鍵字,One為接口名稱

interfaceOne{

constCONSTANT=

'CONSTANTvalue';

//在接口中聲明常量成員屬性和在類中聲明一樣

functionfun1();

//在接口中聲明一個(gè)抽象方法“fun1()”

functionfun2();

//在接口中聲明另一個(gè)抽象方法“fun2()”

}

//聲明一個(gè)抽象類去實(shí)現(xiàn)接口One中的第二個(gè)方法

abstract

classThreeimplementsOne{

functionfun2()

{

//只實(shí)現(xiàn)接口中的一個(gè)抽象方法

//具體的實(shí)現(xiàn)內(nèi)容由子類自決定

}

}

//聲明一個(gè)類實(shí)現(xiàn)接口One中的全部抽象方法

classFourimplementsOne{

functionfun1()

{

//實(shí)現(xiàn)接口中第一個(gè)方法

//具體的實(shí)現(xiàn)內(nèi)容由子類自決定

}

functionfun2()

{

//實(shí)現(xiàn)接口中的第二個(gè)方法

//具體的實(shí)現(xiàn)內(nèi)容由子類自決定

}

}抽象類與接口的區(qū)別定義抽象類表示該類中可能已經(jīng)有一些方法的具體定義。接口就僅僅只能定義各個(gè)方法的界面,不能有具體的實(shí)現(xiàn)代碼在成員方法中。用法抽象類是子類用來(lái)繼承的,當(dāng)父類已有實(shí)際功能的方法時(shí),該方法在子類中可以不必實(shí)現(xiàn)。實(shí)現(xiàn)一個(gè)接口,必須實(shí)現(xiàn)接口中所有定義的方法,不能遺漏任何一個(gè)。8.多態(tài)性的應(yīng)用對(duì)象的多態(tài)性是指在父類中定義的屬性或行為被子類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在父類及其各個(gè)子類中具有不同的語(yǔ)義。

例如:"幾何圖形"的"繪圖"方法,"橢圓"和"多邊形"都是"幾何圖"的子類,其"繪圖"方法功能不同。<?php

//定義一個(gè)USB接口,讓每個(gè)USB設(shè)略都遵守這個(gè)規(guī)范

interfaceUSB{

functionrun();

}

//聲明一個(gè)電腦類,去使用USB設(shè)置

classComputer{

//電腦類中的一個(gè)方法可以應(yīng)用任何一種USB設(shè)備

functionuseUSB($usb)

{

$usb

->run();

}

}

$computer

=

newComputer;

//實(shí)例化一個(gè)電腦類的對(duì)象

$computer

->useUSB(

newUkey()

);

//為電腦插入一個(gè)USB鍵盤設(shè)備,并運(yùn)行

$computer

->useUSB(

newUmouse()

);

//為電腦插入一個(gè)USB鼠標(biāo)設(shè)備,并運(yùn)行

$computer

->useUSB(

newUstore()

);

//為電腦插入一個(gè)USB存儲(chǔ)設(shè)備,并運(yùn)行<?php

//擴(kuò)展一個(gè)USB鍵盤設(shè)置,實(shí)現(xiàn)USB接口

classUkeyimplementsUSB{

publicfunctionrun()

{ //按鍵盤的功能實(shí)現(xiàn)接口中的方法

echo

"運(yùn)行USB鍵盤設(shè)備<br>";

}

}

//擴(kuò)展一個(gè)USB鼠標(biāo)設(shè)置,實(shí)現(xiàn)USB接口

classUmouseimplementsUSB{

publicfunctionrun()

{ //按鼠標(biāo)的功能實(shí)現(xiàn)接口中的方法

echo

溫馨提示

  • 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)論