




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物化學(xué)實(shí)驗(yàn)室技術(shù)測(cè)試卷及答案解析
- 防亂拋亂扔的課件
- 提高視力的自然療法與眼保健
- 收納管理師優(yōu)勢(shì)分析
- 2024-2025學(xué)年高中語(yǔ)文 第二單元 五 人和教學(xué)設(shè)計(jì)5 新人教版選修《先秦諸子選讀》
- 寵物玩具與住所修理考核試卷
- 2024學(xué)年高中地理 第三章 第2節(jié)《以種植業(yè)為主的農(nóng)業(yè)地域類型》教學(xué)設(shè)計(jì) 新人教版必修2
- 農(nóng)林牧漁技術(shù)推廣服務(wù)考核試卷
- 玩具行業(yè)的個(gè)性化定制與智能制造考核試卷
- 報(bào)刊品牌宣傳與市場(chǎng)推廣策略研究考核試卷
- 《藍(lán)橋杯》科學(xué)素養(yǎng)知識(shí)競(jìng)賽考試題庫(kù)(含答案)
- 五上數(shù)學(xué)簡(jiǎn)便運(yùn)算500道及答案
- 工貿(mào)企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化定級(jí)評(píng)分標(biāo)準(zhǔn)(2023版)
- 醫(yī)院信息化維保合同范本
- 小區(qū)消防設(shè)施維修方案小區(qū)的消防設(shè)施歸誰(shuí)管
- 海綿材料的降噪數(shù)值模擬與優(yōu)化
- 醫(yī)療護(hù)理員五級(jí)理論知識(shí)考核試題
- 中央戲劇學(xué)院招聘(實(shí)踐教學(xué)中心)筆試真題2023
- 中國(guó)郵政四川分公司社會(huì)招聘筆試真題2023
- 戶外體育場(chǎng)音視頻設(shè)計(jì)投標(biāo)方案(技術(shù)方案)
- 信息通信網(wǎng)運(yùn)營(yíng)管理智能化水平分級(jí)技術(shù)要求 IP網(wǎng)絡(luò)
評(píng)論
0/150
提交評(píng)論