【ch09】PHP面向?qū)ο缶庉媉第1頁
【ch09】PHP面向?qū)ο缶庉媉第2頁
【ch09】PHP面向?qū)ο缶庉媉第3頁
【ch09】PHP面向?qū)ο缶庉媉第4頁
【ch09】PHP面向?qū)ο缶庉媉第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第九章Web程序設(shè)計PHP面向?qū)ο缶庉嬓鹿た平ㄔO(shè)之路·計算機類專業(yè)系列教材01類與對象01類與對象正所謂“物以類聚,人以群分”。世間萬物都具有其自身的屬性和方法,通過這些屬性和方法可以將不同物質(zhì)區(qū)分開。現(xiàn)實世界與計算機世界中類和對象的定義關(guān)系如圖9-1所示。1.類的定義01類與對象在現(xiàn)實世界中,類是一組具有相同屬性和行為的對象的抽象。類與對象之間的關(guān)系是抽象與具體的關(guān)系。類是對多個對象進行綜合抽象的結(jié)果,對象又是類的個體實物,一個對象是類的一個實例。在面向?qū)ο蟪绦蛟O(shè)計中,類就是具有相同的數(shù)據(jù)和相同的操作(函數(shù))的一組對象的集合,也就是說,類是對具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的一類對象的描述。2.對象的由來類與對象的關(guān)系為:對象是類的實例,類是對象的模板。3.類與對象的關(guān)系01類與對象面向?qū)ο缶幊痰?個重要特點是:繼承性、封裝性和多態(tài)性,迎合了編程中注重代碼重用性、靈活性和可擴展性的需要,奠定了面向?qū)ο笤诰幊讨械牡匚?。①封裝性:將一個類的使用和實現(xiàn)分開,只保留有限的接口(方法)與外部聯(lián)系。②繼承性:派生類(子類)自動繼承一個或多個基類(父類)中的屬性和方法,并可以重寫或添加新的屬性或方法,簡化了對象和類的創(chuàng)建,增加了代碼的可重用性。③多態(tài)性:指同一個類的不同對象,使用同一個方法可以獲得不同的結(jié)果。4.面向?qū)ο蟮奶攸c02類的聲明02類的聲明01類的定義類的語法格式如下:其中,權(quán)限修飾符是可選項,可以使用public、protected、private或省略三者;class是創(chuàng)建類的關(guān)鍵字;類名是要創(chuàng)建的類的名稱,必須寫在class關(guān)鍵字后,在類的名稱后必須跟上一對“{}”;類體是類的成員,類體必須放在類名后的“{}”之間。02類的聲明02成員屬性成員變量就是類中的變量,主要用于存儲數(shù)據(jù)信息。在類中直接聲明的變量被稱為成員屬性(或成員變量),可以在類中聲明多個變量,即對象中有多個成員屬性,每個變量存儲對象的不同屬性信息。成員屬性的類型可以是PHP中的標量類型和復(fù)合類型,如果使用資源和空類型是沒有意義的。定義成員變量的語法格式如下:02類的聲明03成員方法在類中聲明的函數(shù)稱為成員方法。一個類中可以聲明多個函數(shù),即對象中可以有多個成員方法。成員方法的聲明和函數(shù)的聲明是相同的,唯一特殊之處是,成員方法可以用關(guān)鍵字來修飾,控制成員方法的權(quán)限。聲明成員方法的語法格式如下:在類中,成員屬性和成員方法的聲明都是可選的,二者可以同時存在,也可以單獨存在。具體應(yīng)該根據(jù)實際的需求來定。03類的實例化03類的實例化01創(chuàng)建(實例化)對象構(gòu)造方法是在創(chuàng)建對象時第一個被對象自動調(diào)用的方法,存在于每個聲明的類中,是一個特殊的成員方法。如果在類中沒有直接聲明構(gòu)造方法,那么類中會默認生成一個沒有任何參數(shù)且內(nèi)容為空的構(gòu)造方法。在PHP中,構(gòu)造方法的聲明有兩種情況:第一種在PHP5以前的版本中,構(gòu)造方法的名稱必須與類名相同;第二種在PHP5的版本中,構(gòu)造方法的名稱必須是以兩個下畫線開始的“_construct()"(中間沒有空格)。1.構(gòu)造方法03類的實例化01創(chuàng)建(實例化)對象2.析構(gòu)方法析構(gòu)方法是在對象銷毀時被自動調(diào)用的,用于完成對象在銷毀前的清理工作。因此析構(gòu)方法的作用和構(gòu)造方法正好相反,是對象被銷毀之前最后一個被對象自動調(diào)用的方法。析構(gòu)方法的聲明格式與構(gòu)造方法類似,都是以兩個下畫線開頭的“_destruct”,

析構(gòu)函數(shù)沒有任何參數(shù),其語法格式如下:04面向?qū)ο蟮姆庋b性04面向?qū)ο蟮姆庋b性面向?qū)ο缶幊痰奶攸c之一是封裝性,類的封裝是對屬性和方法的訪問控制(不是拒絕訪問),將類中的成員屬性和成員方法結(jié)合成一個獨立的相同單位,并盡可能隱藏對象的內(nèi)容細節(jié),目的是確保類以外的部分不能隨意存取類的內(nèi)部數(shù)據(jù)(成員屬性和成員方法),從而有效避免外部錯誤對類內(nèi)數(shù)據(jù)的影響。使用者只能通過類提供的公共方法來實現(xiàn)對內(nèi)部成員的訪問和操作,而不能直接訪問對象內(nèi)部成員,從而可以增強程序的安全性。04面向?qū)ο蟮姆庋b性01靜態(tài)屬性和靜態(tài)方法1靜態(tài)屬性靜態(tài)屬性就是通過關(guān)鍵字static修飾的成員屬性,屬于類本身而不屬于類的任何實例對象,相當于存儲在類中的全局變量,可以在任何位置通過類來訪問。靜態(tài)屬性訪問的語法格式如下:靜態(tài)方法靜態(tài)方法就是通過關(guān)鍵字static修飾的成員方法。由于它不受任何對象的限制,因此可以不通過類的實例化直接引用類中的靜態(tài)方法。靜態(tài)方法引用的語法格式如下:205

面向?qū)ο蟮睦^承性05面向?qū)ο蟮睦^承性01類的繼承:extends關(guān)鍵字類的繼承是類與類之間的一種關(guān)系的體現(xiàn)。子類不僅有自己的屬性和方法,還有父類的所有屬性和方法。在PHP中,類的繼承通過extends關(guān)鍵字實現(xiàn),其語法格式如下:子類繼承了父類中的屬性和方法,也可以添加新的屬性和方法。05面向?qū)ο蟮睦^承性02類的繼承:parent::關(guān)鍵字通過parent::關(guān)鍵字也可以在子類中調(diào)用父類中的成員方法,其語法格式如下:05面向?qū)ο蟮睦^承性03覆蓋父類方法在繼承關(guān)系中,有時從父類繼承下來的方法不能完全滿足子類的需要,可以采用覆蓋父類的方法,也就是使用子類中的方法將從父類中繼承的方法進行替換。覆蓋父類方法又稱方法的重寫。覆蓋父類方法的關(guān)鍵就是在子類中創(chuàng)建與父類中相同的方法,包括方法名稱、參數(shù)和返回值類型。注意:當父類和子類中都定義了構(gòu)造方法時,并且子類的對象被創(chuàng)建后,將調(diào)用子類的構(gòu)造方法,而不會調(diào)用父類的構(gòu)造方法。05面向?qū)ο蟮睦^承性04final關(guān)鍵字雖然繼承可以實現(xiàn)代碼重用,但有時可能要求某個類不能被繼承或某個類中的方法不能被重寫,這時就需要使用final關(guān)鍵字,可以修飾類或類中的成員方法。被final關(guān)鍵字修飾過的類和成員方法就是“最終的版本”。如果一個類的格式如下:說明該類不可以被繼承,也不能有子類。06

抽象類和接口06抽象類和接口01抽象類類中可以定義不含方法體的成員方法,該類的子類可以根據(jù)實際需求實現(xiàn)方法體,這樣的成員方法稱為抽象方法。抽象方法使用abstract關(guān)鍵字修飾。包含抽象方法的類必須是抽象類,抽象類也使用abstract關(guān)鍵字修飾。抽象類是一種不能被實例化的類,只能作為其他類的父類來使用。抽象類使用abstract關(guān)鍵字來聲明,其語法格式如下:06抽象類和接口02接口接口通過interface關(guān)鍵字來聲明,接口中聲明的方法必須是抽象方法,接口中不能聲明變量,只能使用const關(guān)鍵字聲明常量的成員屬性,并且接口中的所有成員都必須具備public的訪問權(quán)限。接口聲明的語法格式如下:接口中的所有方法都是抽象方法,因此方法名前就不需要使用abstract關(guān)鍵字修飾了。與抽象類相似,接口中也包含抽象方法。因此,接口和抽象類都不能進行實例化的操作,也需要通過子類來實現(xiàn)。但是接口可以直接使用接口名稱在接口外獲取常量成員的值。1.接口的聲明06抽象類和接口02接口因為接口不能進行實例化的操作,所以要使用接口中的成員,就必須借助子類。在子類中繼承接口使用implements關(guān)鍵字。如果實現(xiàn)多個接口的繼承,那么每個接口之間用連接。PHP中一個類只能有一個父類,但一個類可以有多個接口。2.接口的應(yīng)用注意既然通過子類繼承了接口中的方法,那么接口中的所有方法必須都在子類中實現(xiàn),否則PHP將拋出錯誤信息。07

面向?qū)ο蟮哪g(shù)方法07面向?qū)ο蟮哪g(shù)方法01se()方法和_get()方法set()方法和_get()方法對私有成員進行賦值或獲取值的操作。_set()方法:

在程序運行過程中為私有的成員屬性設(shè)置值,不需要任何返回值,包含兩個參數(shù),分別表示變量名稱和變量值,這兩個參數(shù)不可省略。set()方法不需要主動調(diào)用,可以在方法前加上private關(guān)鍵字修飾,防止用戶直接調(diào)用。_get()方法:在程序運行過程中,在對象的外部獲取私有成員屬性的值,有一個必選參數(shù),即私有成員屬性名,返回一個允許對象在外部使用的值。_get()方法同樣不需要主動調(diào)用,可以在方法前加上private關(guān)鍵字,防止用戶直接調(diào)用。07面向?qū)ο蟮哪g(shù)方法02isset()方法和___unset()方法如果在對象中存在_isset()方法,當在類的外部使用isset()方法檢測對象中的私有成員屬性時,就會自動調(diào)用類中的__isset()方法完成對私有成員屬性的檢測操作,其語法格式如下:unset()方法的作用是刪除指定的變量,其參數(shù)為要刪除的變量名稱。在面向?qū)ο笾?,unset()方法可以對公有的成員屬性進行刪除操作,但是對于私有的成員屬性,就必須在_unset()方法的幫助下才能夠完成刪除操作。07面向?qū)ο蟮哪g(shù)方法03_call()方法如果通過對象調(diào)用未定義的成員方法時,程序會報錯并退出;如果在類中添加call()方法,程序會自動調(diào)用_call()方法并繼續(xù)往下執(zhí)行。_call()方法的作用是:當程序試圖調(diào)用不存在或不可見的成員方法時,PHP會先調(diào)用_call()方法來存儲方法名及其參數(shù)。_call()方法包含兩個參數(shù),即方法名和方法參數(shù)。其中,方法參數(shù)是以數(shù)組形式存在的。07面向?qū)ο蟮哪g(shù)方法04toString()方法如果程序直接使用echo輸出一個對象,就會出現(xiàn)錯誤。如果在類中添加了__toString()方法,程序輸出對象時就不會出現(xiàn)錯誤。__toString()方法的作用是:當使用echo或print輸出對象時,將對象轉(zhuǎn)化為字符串。注意:①如果沒有_toString()方法,直接輸出對象將會發(fā)生致命錯誤(fatalerror)。②輸出對象時應(yīng)注意,echo()或print()后直接跟要輸出的對象,中間不要加多余的字符,否則_toString()方法不會被執(zhí)行。07面向?qū)ο蟮哪g(shù)方法05clone()方法克隆對象對象的克隆可以通過clone關(guān)鍵字來實現(xiàn)。使用clone關(guān)鍵字克隆的對象與原對象沒有任何關(guān)系,它是將原對象從當前位置重新復(fù)制了一份,相當于在內(nèi)存中新開辟了一個空間。使用clone關(guān)鍵字克隆對象的語法格式如下:12克隆副本對象的初始化_clone()方法可以將克隆后的副本對象初始化,不需要任何參數(shù),其中包含$this和Sthat兩個對象的引用,$this是對副本對象的引用,$that則是對原本對象的引用。08

兩種常見的設(shè)計模式08兩種常見的設(shè)計模式單例模式是指一個類在程序運行期間有且僅有一個實例,并且自行實例化向整個系統(tǒng)提供這個實例。單例設(shè)計模式常應(yīng)用于數(shù)據(jù)庫類設(shè)計,采用單例模式只能連接一次數(shù)據(jù)庫,防止打開多個數(shù)據(jù)庫連接,避免進行大量的new操作而消耗內(nèi)存資源。單例類應(yīng)具備以下特點:單例類不能直接實例化創(chuàng)建,只能由類本身實例化。在PHP中,為了防止他人對單例類實例克隆,通常還為其提供一個空的私有_clone()方法。單例模式的使用場景如下:①要求生產(chǎn)唯一序列號;②Web中的計數(shù)器不用每次刷新都在數(shù)據(jù)庫里加一次,先用單例緩存;③創(chuàng)建一個對象需要消耗的資源過多,如I/O與數(shù)據(jù)庫的連接等。1.單例模式08兩種常見的設(shè)計模式單例模式具有如下特點。①$_instance必須聲明為靜態(tài)的私有變量。②構(gòu)造函數(shù)和析構(gòu)函數(shù)必須聲明為私有,防止外部程序new類操作失去單例模式。③getInstance()方法必須設(shè)置為公有的,必須調(diào)用此方法以返回實例的一個引用。④操作符“.:”只能訪問靜態(tài)變量和靜態(tài)函數(shù)。⑤new對象都會消耗內(nèi)存。⑥常用的地方是數(shù)據(jù)庫連接。⑦使用單例模式生成一個對象后,該對象可以被其他眾多對象使用。⑧私有的_clone()方法防止克隆對象。⑨單例模式僅允許創(chuàng)建一個某個類的對象。1.單例模式08兩種常見的設(shè)計模式工廠模式主要用來實例化有共

溫馨提示

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

評論

0/150

提交評論