PHP教程-面向?qū)ο蟾呒塤第1頁
PHP教程-面向?qū)ο蟾呒塤第2頁
PHP教程-面向?qū)ο蟾呒塤第3頁
PHP教程-面向?qū)ο蟾呒塤第4頁
PHP教程-面向?qū)ο蟾呒塤第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、PHP面向?qū)ο蟾呒壘W(wǎng)址:http:/ 電話:400 700 1307OOP的3個(gè)重要特性 封裝的類 類層次結(jié)構(gòu),繼承 多態(tài)性 封裝性就是把對象的屬性和行為結(jié)合成一個(gè)獨(dú)立的相同單位,并盡可能隱蔽對象的內(nèi)部細(xì)節(jié)。 1.把對象的全部屬性和全部行為結(jié)合在一起,形成一個(gè)不可分割的獨(dú)立單位(即對象)。 2.信息隱蔽,即盡可能隱蔽對象的內(nèi)部細(xì)節(jié),對外形成一個(gè)邊界或者說形成一道屏障,只保留有限的對外接口使之與外部發(fā)生聯(lián)系。 封裝的原則在軟件上的反映是:要求使對象以外的部分不能隨意存取對象的內(nèi)部數(shù)據(jù)(屬性),從而有效的避免了外部錯(cuò)誤對它的交叉感染,使軟件錯(cuò)誤能夠局部化,大大減少查錯(cuò)和排錯(cuò)的難度。封裝的類類的封裝

2、將類的成員變量聲明為private,再通過public 的方法來對這個(gè)變量進(jìn)行訪問。即可實(shí)現(xiàn)良好的封裝性。對于一個(gè)變量的操作,一般都有讀取和賦值操作,getXxx(),setXxx();類的封裝性帶來的優(yōu)點(diǎn)隱藏類的實(shí)現(xiàn)細(xì)節(jié)讓使用者只能通過事先定義好的方法來訪問數(shù)據(jù),可以方便的加入邏輯控制,進(jìn)行數(shù)據(jù)檢查,限制對屬性的不合理操作。便于修改增強(qiáng)代碼的可維護(hù)性_get()和_set()一般來說,把類的屬性定義為private,這更符合現(xiàn)實(shí)的邏輯。但是, 對屬性的讀取和賦值操作是非常頻繁的,因此在PHP5中,預(yù)定義了兩個(gè)函數(shù)_get()和_set()來獲取和賦值其屬性。/_get()function _

3、get($property_name) if(isset($this-$property_name) return($this-$property_name); else return(NULL); /_set()function _set($property_name, $value) $this-$property_name = $value; 繼承性: B類的對象擁有A類的全部屬性與行為,稱作B對A類的繼承。例如,輪船客輪;人大人。假如一個(gè)類只繼承了另外一個(gè)類,這稱為單繼承。例如:狗繼承動(dòng)物;另外假如一個(gè)類從多個(gè)類中繼承了屬性與服務(wù),這稱為多繼承。例如,客輪繼承輪船和客運(yùn)工具。通常我們稱

4、被繼承類為父類(superclass,超類),繼承類為子類(subclass)。在PHP中只有單繼承,但一個(gè)類可以被多個(gè)類繼承。 繼承 如果類是另一個(gè)類的子類,可以用關(guān)鍵詞 extends 來指明其繼承關(guān)系。如下代碼創(chuàng)建了一個(gè)名為B的類,它繼承了在它前面定義的類A。 Class Aclass B extends A public $num1;public $num2; function fun1()function fun2() 如下所示的所有對類B對象的操作和屬性的訪問都是有效的: $b=new B(); $b-$num1=10;$b-$num2=20; $b-fun1( );$b-fun2

5、( );類的繼承class Person public $name; public $age; function getInfo().class Student public $name; public $age; public $school; function getInfo(). function study().class Person public $name; public $age; function getInfo().class Student extends Person public $school; function study().通過繼承可以簡化類的定義。類的繼承

6、PHP只支持單繼承,不允許多重繼承。一個(gè)子類只能有一個(gè)父類,不允許一個(gè)類直接繼承多個(gè)類,但一個(gè)類可以被多個(gè)類繼承。 可以有多層繼承,即一個(gè)類可以繼承某一個(gè)類的子類,如類B 繼承了類A,類C又繼承了類B,那么類C也間接繼承了類A, class A class B extends A class C extends B 子類與父類的屬性與方法子類繼承父類的所有內(nèi)容,但父類中的private部分不能直接訪問子類中新增加的屬性和方法是對父類的擴(kuò)展子類中定義的與父類同名的屬性是對父類屬性的覆蓋,同名的方法也是對父類方法的覆蓋重寫新的方法 在子類里面重寫父類的方法 在子類中,使用parent訪問父類中的被

7、覆蓋的屬性和方法 parent:_construce(); parent:fun();對象類型的檢測instanceof instanceof操作符用于檢測當(dāng)前對象實(shí)例是否屬于某一個(gè)類的類型。final關(guān)鍵字 這個(gè)關(guān)鍵字只能用來定義類和定義方法, 不能使用final這個(gè)關(guān)鍵字來定義成員屬性,因?yàn)閒inal是常量的意思,我們在PHP里定義常量使用的是define()函數(shù)和const關(guān)鍵字,所以不能使用final來定義成員屬性。 final的特性 使用final關(guān)鍵字標(biāo)記的類不能被繼承; 使用final關(guān)鍵字標(biāo)記的方法不能被子類覆蓋,是最終版本; 多態(tài)性: 對象的多態(tài)性是指在父類中定義的屬性或行為

8、被子類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在父類及其各個(gè)子類中具有不同的語義。 例如:幾何圖形的繪圖方法,橢圓和多邊形都是幾何圖的子類,其繪圖方法功能不同。類的多態(tài) 所謂多態(tài),即同一個(gè)方法,執(zhí)行的結(jié)果不同。 利用可擴(kuò)展的面向?qū)ο?,在?shí)際開發(fā)中減少很多邏輯控制語句,實(shí)現(xiàn)多態(tài)的強(qiáng)大特性。class A function info() echo “A INFO”; class B extends A function info() echo “B INFO”; class C extends A function info() echo “C INFO”; fu

9、nction printinfo($obj) | function printinfo(A $obj)if($obj instanceof A) | $obj-info();$obj-info(); | |$a=new A(); $b=new B(); $c=new C();printinfo($a);/輸出A INFOprintinfo($b);/輸出B INFOprintinfo($c);/輸出C INFO抽象方法和抽象類 在OOP語言中,一個(gè)類可以有一個(gè)或多個(gè)子類,而每個(gè)類都有至少一個(gè)公有方法做為外部代碼訪問其的接口。而抽象方法就是為了方便繼承而引入的。 抽象方法是做為子類覆蓋的模板使用

10、的。 格式:abstract function 函數(shù)名; abstract function 方法名( ); 抽象方法的定義及繼承覆蓋示例:abstract class A_classabstract function getPicName( );/抽象類及抽象方法class B_class extends A_class public function getPicName( )/覆蓋抽象類的getPicName/方法代碼體; /繼承了抽象類并覆蓋了抽象方法 抽象類不能被實(shí)例化,一個(gè)抽象類中可以包含非抽象方法。 接口PHP與大多數(shù)面向?qū)ο缶幊陶Z言一樣,不支持多重繼承,也就是說每個(gè)類只能繼承一

11、個(gè)父類。為了解決這個(gè)這個(gè)問題,PHP引入了接口,接口的思想是指定了一個(gè)實(shí)現(xiàn)了該接口的類必須實(shí)現(xiàn)的一系列函數(shù)。如果在一個(gè)抽象類中包含的只有抽象方法,可以將其定義為interface(接口),用implements(實(shí)現(xiàn))關(guān)鍵字使用它。interface 接口名class 類名 implements 接口名 當(dāng)一個(gè)類在繼承了一個(gè)接口后,它必須實(shí)現(xiàn)即覆蓋該接口的所有方法1、接口中只能聲明常量屬性,不能聲明變量屬性interface A_classconst PI=3.14;/public $a; this is error2、接口中的方法默認(rèn)為抽象方法,必須定義為公有否則無法繼承:interface

12、 A_classpublic function getPicName();/默認(rèn)為public,可以省略3、接口中的抽象方法可以聲明為static實(shí)現(xiàn)多個(gè)接口與接口間的繼承interface A function a();interface B function b();interface C extends A function c();class D implements B,Cfunction a()function b()function c()/class D implements C,A this is error抽象類與接口的區(qū)別 定義 抽象類表示該類中可能已經(jīng)有一些方法的具體定義。 接口就僅僅只能定義各個(gè)方法的界面,不能有具體的實(shí)現(xiàn)代碼在成員方法中。 用法 抽象類是子類用來繼承的,當(dāng)父類已有實(shí)際功能的方法時(shí),該方法在子類中可以不必實(shí)現(xiàn) 實(shí)現(xiàn)一個(gè)接口,必須實(shí)現(xiàn)接口中所有定義的方法,不能遺漏任何一個(gè)。總結(jié):面向?qū)ο?優(yōu)點(diǎn): 類將代碼

溫馨提示

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

最新文檔

評論

0/150

提交評論