面向?qū)ο笤O(shè)計_第1頁
面向?qū)ο笤O(shè)計_第2頁
面向?qū)ο笤O(shè)計_第3頁
面向?qū)ο笤O(shè)計_第4頁
面向?qū)ο笤O(shè)計_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

//聲明一個抽象類,要使用abstract關(guān)鍵字標識

abstract

classPerson{

protected

$name;

//聲明一個存儲人的名字的成員

protected

$country;

//聲明一個存儲人的國家的成員

pubicfunction__construct($name="",

$country="china")

{

$this->name=

$name;

$this->country=

$country;

}

//在抽象類中聲明一個沒有方法體的抽象方法,使用abstract關(guān)鍵字標識

publicabstract

functionsay();

//在抽象類中聲明另一個沒有方法體的抽象方法,使用abstract關(guān)鍵字標識

publicabstract

functioneat();

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

publicfunctionrun(){

echo

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

//有方法體,輸出一條語句

}

}<?php

//聲明一個類去繼承抽象類Person

classChineseManextendsPerson{

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

publicfunctionsay()

{

echo

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

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

}

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

publicfunctioneat()

{

echo

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

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

}

}

//聲明另一個類去繼承抽象類Person

classAmericansextendsPerson{

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

}

$chineseMan

=

newChineseMan("高洛峰",

"中國");

//將第一個Person的子類實例化對象

$americans

=

newAmericans("alex",

"美國");

//將第二個Person的子類實例化對象

$chineseMan

->say();

//通過第一個對象調(diào)用子類中已經(jīng)實例父類中抽象方法的say()方法

$chineseMan

->eat();

//通過第一個對象調(diào)用子類中已經(jīng)實例父類中抽象方法的eat()方法

$americans

->say();

//通過第二個對象調(diào)用子類中已經(jīng)實例父類中抽象方法的say()方法

$americans

->eat();

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

定義格式:

interface接口名稱{

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

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

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

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

interfaceOne{

constCONSTANT=

'CONSTANTvalue';

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

functionfun1();

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

functionfun2();

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

}

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

abstract

classThreeimplementsOne{

functionfun2()

{

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

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

}

}

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

classFourimplementsOne{

functionfun1()

{

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

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

}

functionfun2()

{

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

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

}

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

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

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

interfaceUSB{

functionrun();

}

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

classComputer{

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

functionuseUSB($usb)

{

$usb

->run();

}

}

$computer

=

newComputer;

//實例化一個電腦類的對象

$computer

->useUSB(

newUkey()

);

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

$computer

->useUSB(

newUmouse()

);

//為電腦插入一個USB鼠標設(shè)備,并運行

$computer

->useUSB(

newUstore()

);

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

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

classUkeyimplementsUSB{

publicfunctionrun()

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

echo

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

}

}

//擴展一個USB鼠標設(shè)置,實現(xiàn)USB接口

classUmouseimplementsUSB{

publicfunctionrun()

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

echo

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論