版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
7.1面向?qū)ο蟮母拍?/p>
7.1.1 面向?qū)ο缶幊痰幕靖拍钤诿嫦驅(qū)ο缶幊讨?,?yīng)用程序的結(jié)構(gòu)模塊被組織為相應(yīng)的對(duì)象(object)。一個(gè)面向?qū)ο蟮膽?yīng)用程序?qū)嶋H上就是由一系列的相關(guān)對(duì)象所構(gòu)成的。作為應(yīng)用程序的基本組件,對(duì)象是封裝了相應(yīng)屬性(property)與方法(method)的實(shí)體(entity)。其中,屬性描述了對(duì)象的靜態(tài)特征,即對(duì)象的數(shù)據(jù)或狀態(tài);而方法則描述了對(duì)象的動(dòng)態(tài)行為,即對(duì)象所能執(zhí)行的功能或操作。通常,可將對(duì)象的屬性理解為變量,而將對(duì)象的方法理解為函數(shù)。應(yīng)用程序中各對(duì)象之間的聯(lián)系是通過(guò)傳遞消息來(lái)實(shí)現(xiàn)的。如果想讓對(duì)象執(zhí)行某個(gè)操作,那么就必須向其發(fā)送一個(gè)消息;待對(duì)象接收到信息后,便可調(diào)用相應(yīng)的方法去執(zhí)行指定的操作。下一頁(yè)返回7.1面向?qū)ο蟮母拍?/p>
類(lèi)(class)是面向?qū)ο缶幊讨械囊粋€(gè)十分重要的概念與要素。所謂類(lèi),其實(shí)就是具有相同特征與操作的一組對(duì)象的描述與定義,相當(dāng)于對(duì)象的類(lèi)型或分類(lèi)。在一個(gè)類(lèi)中,同樣也封裝了相應(yīng)的屬性與方法。通常,可將類(lèi)看作是構(gòu)造對(duì)象的模板或藍(lán)本,而一個(gè)具體的對(duì)象則是相應(yīng)類(lèi)的一個(gè)實(shí)例?;谕粋€(gè)類(lèi)所生成的每一個(gè)對(duì)象,都包含有類(lèi)所提供的方法,但其屬性的取值卻有可能不同。類(lèi)和對(duì)象的關(guān)系,類(lèi)似于大家所熟悉的數(shù)據(jù)類(lèi)型與變量的關(guān)系,也是一種抽象與具體的關(guān)系。類(lèi)的屬性與方法通常又稱(chēng)為類(lèi)的成員。例如,在開(kāi)發(fā)一個(gè)學(xué)生成績(jī)管理系統(tǒng)時(shí),可先創(chuàng)建一個(gè)學(xué)生類(lèi)student。該類(lèi)具有一些屬性,如學(xué)號(hào)、姓名、性別等。該類(lèi)也具有一些方法,如選課、退課等。有了學(xué)生類(lèi)student,便可以創(chuàng)建相應(yīng)的學(xué)生對(duì)象,如studentA、studentB等。上一頁(yè)下一頁(yè)返回7.1面向?qū)ο蟮母拍?/p>
接著,便可以控制各學(xué)生對(duì)象去完成相應(yīng)的操作,如選課、退課等。在此,學(xué)生類(lèi)實(shí)際上是一個(gè)整體概念,可理解為所有學(xué)生個(gè)體的統(tǒng)稱(chēng)。而每個(gè)學(xué)生對(duì)象或?qū)W生個(gè)體,則是學(xué)生類(lèi)的一個(gè)具體實(shí)例。各學(xué)生對(duì)象都具有相同的屬性集,但其具體取值卻可能有所不同。另外,各學(xué)生對(duì)象都具有相同的方法集,通過(guò)對(duì)有關(guān)方法的調(diào)用,即可讓各學(xué)生對(duì)象完成相應(yīng)的操作。7.1.2 面向?qū)ο缶幊痰闹饕卣髋c面向過(guò)程編程相比,面向?qū)ο缶幊逃衅涿鞔_的特征。其中,最主要的特征就是封裝性(encapsulation)、繼承性(inheritance)與多態(tài)性(polymorphism)。封裝性是指將數(shù)據(jù)(即屬性)與操作(即方法)置于對(duì)象之中,其主要目的是實(shí)現(xiàn)對(duì)象的數(shù)據(jù)隱藏與數(shù)據(jù)保護(hù),并為對(duì)象提供相應(yīng)的接口。上一頁(yè)下一頁(yè)返回7.1面向?qū)ο蟮母拍?/p>
這樣,在訪問(wèn)對(duì)象中的數(shù)據(jù)時(shí),只能通過(guò)對(duì)象所提供的操作來(lái)實(shí)現(xiàn)。通過(guò)封裝,可以有效地隱藏對(duì)象內(nèi)部的具體細(xì)節(jié),并實(shí)現(xiàn)對(duì)象的相對(duì)獨(dú)立性,從而便于應(yīng)用程序的維護(hù)與擴(kuò)展。其實(shí),封裝性同樣適用于類(lèi),在不同的類(lèi)中即封裝了該類(lèi)的屬性與方法。封裝性是面向?qū)ο缶幊痰闹饕卣髦?,在某種意義上可將其看作結(jié)構(gòu)化編程技術(shù)的邏輯延伸。繼承性是指從一個(gè)已存在的類(lèi)派生出另外一個(gè)或多個(gè)新類(lèi)。其中,被繼承的類(lèi)稱(chēng)為父類(lèi),而通過(guò)繼承所產(chǎn)生的類(lèi)則稱(chēng)為子類(lèi)。由于子類(lèi)是從其父類(lèi)繼承而來(lái)的,因此子類(lèi)將擁有其父類(lèi)的全部屬性與方法。此外,必要時(shí)還可以在子類(lèi)中對(duì)所繼承的屬性與方法進(jìn)行修改(但不能刪除),或者添加新的屬性和方法。更重要的是,在父類(lèi)中所進(jìn)行的修改會(huì)自動(dòng)更新到相應(yīng)的子類(lèi)中。上一頁(yè)下一頁(yè)返回7.1面向?qū)ο蟮母拍?/p>
繼承性是面向?qū)ο缶幊痰闹匾卣?,也是使?yīng)用程序具有良好的可重用性與可擴(kuò)展性的根本所在。為便于理解,可將繼承看作是復(fù)制類(lèi)的一種特殊方式。通過(guò)繼承,可以充分利用已有的程序代碼,縮短應(yīng)用程序的開(kāi)發(fā)周期,并提高應(yīng)用程序的開(kāi)發(fā)質(zhì)量。實(shí)際上,繼承可分為兩種類(lèi)型,即單重繼承與多重繼承。其中,單重繼承是指一個(gè)子類(lèi)只能有一個(gè)父類(lèi),多重繼承是指一個(gè)子類(lèi)可以有多于一個(gè)父類(lèi)。多態(tài)性是指同名方法(或函數(shù))的功能可隨對(duì)象類(lèi)型或參數(shù)定義的不同而有所不同。實(shí)現(xiàn)多態(tài)性的主要方法是重載,即對(duì)類(lèi)中已有的方法進(jìn)行重新定義。對(duì)于某一類(lèi)對(duì)象來(lái)說(shuō),在調(diào)用多態(tài)方法進(jìn)行傳遞的參數(shù)或參數(shù)個(gè)數(shù)不同,該方法所實(shí)現(xiàn)的功能或過(guò)程也會(huì)有所不同。多態(tài)性也是面向?qū)ο缶幊痰囊粋€(gè)重要特征,一方面可以使各類(lèi)對(duì)象的處理趨向一致;另一方面,也有利于提高應(yīng)用程序的靈活性。上一頁(yè)返回7.2 類(lèi)和對(duì)象7.2.1 類(lèi)的定義在面向?qū)ο蟮乃枷胫校詈诵牡木褪菍?duì)象。為了在程序中創(chuàng)建對(duì)象,需要定義一個(gè)類(lèi)。類(lèi)是對(duì)象的抽象,它用于描述一組對(duì)象的共同特征和行為。類(lèi)中可以定義屬性和方法,其屬性用于描述對(duì)象的特征,方法用于描述對(duì)象的行為。類(lèi)的定義語(yǔ)法格式如下:下一頁(yè)返回7.2 類(lèi)和對(duì)象上述語(yǔ)法格式中,class表示定義類(lèi)的關(guān)鍵字,通過(guò)該關(guān)鍵字就可以定義一個(gè)類(lèi)。在類(lèi)中聲明的變量被稱(chēng)為成員屬性,主要用于描述對(duì)象的特征,如人的姓名、年齡等。在類(lèi)中聲明的函數(shù)被稱(chēng)為成員方法,主要用于描述對(duì)象的行為,如人可以說(shuō)話、走路等。接下來(lái)通過(guò)一個(gè)案例來(lái)演示如何定義一個(gè)類(lèi),見(jiàn)例7-1。【例7-1】上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象例7-1中定義了一個(gè)類(lèi)。其中,Person是類(lèi)名,name和age是成員屬性,speak()是成員方法。在成員方法speak()中可以使用$this訪問(wèn)成員屬性name和age。需要注意的是,$this表示當(dāng)前對(duì)象,這里是指Person類(lèi)實(shí)例化后的具體對(duì)象。7.2.2 對(duì)象的創(chuàng)建應(yīng)用程序想要完成具體的功能,僅有類(lèi)是遠(yuǎn)遠(yuǎn)不夠的,還需要根據(jù)類(lèi)創(chuàng)建實(shí)例對(duì)象。在PHP程序中可以使用new關(guān)鍵字來(lái)創(chuàng)建對(duì)象,具體格式如下:上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象上述語(yǔ)法格式中,“$對(duì)象名”表示一個(gè)對(duì)象的引用名稱(chēng),通過(guò)這個(gè)引用就可以訪問(wèn)對(duì)象中的成員,其中$符號(hào)是固定寫(xiě)法,對(duì)象名是自定義的。“new”表示要?jiǎng)?chuàng)建一個(gè)新的對(duì)象,“類(lèi)名”表示新對(duì)象的類(lèi)型?!癧參數(shù)1,參數(shù)2]”中的參數(shù)是可選的。對(duì)象創(chuàng)建成功后,就可以通過(guò)“對(duì)象→成員”的方式來(lái)訪問(wèn)類(lèi)的成員。需要注意的是,如果在創(chuàng)建對(duì)象時(shí)不需要傳遞參數(shù),則可以省略類(lèi)名后面的括號(hào),即“new類(lèi)名;”。接下來(lái)通過(guò)一個(gè)案例來(lái)演示如何創(chuàng)建Person類(lèi)的實(shí)例對(duì)象,見(jiàn)例7-2。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象【例7-2】運(yùn)行結(jié)果如圖7-1所示。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象7.2.3 類(lèi)成員和作用域通過(guò)前面的學(xué)習(xí)了解到,類(lèi)在實(shí)例化對(duì)象時(shí),該對(duì)象中的成員只被當(dāng)前對(duì)象所有。如果希望在類(lèi)中定義的成員被所有實(shí)例共享,可以使用為類(lèi)常量或靜態(tài)成員來(lái)實(shí)現(xiàn)。接下來(lái)將針對(duì)類(lèi)常量和靜態(tài)成員的相關(guān)知識(shí)進(jìn)行詳細(xì)講解。1.類(lèi)常量在類(lèi)中,有些屬性的值不能改變,并且希望被所有對(duì)象所共享,例如圓周率,它是一個(gè)數(shù)學(xué)常數(shù),在數(shù)學(xué)物理計(jì)算中廣泛使用,此時(shí)可以將表示圓周率的成員屬性定義為常量。在定義類(lèi)常量時(shí),需要使用const關(guān)鍵字來(lái)申明,示例代碼如下:上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象上述示例代碼中,使用const關(guān)鍵字來(lái)聲明常量,常量名前不需要添加$符號(hào),并且在聲明的同時(shí)必須對(duì)其進(jìn)行初始化工作。為了方便讀者更好地理解類(lèi)常量,接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)類(lèi)常量的使用和聲明,見(jiàn)例7-3?!纠?-3】上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象運(yùn)行結(jié)果如圖7-2所示。在例7-3中,定義了一個(gè)類(lèi)常量PI,由于在類(lèi)中聲明的常量PI是屬于類(lèi)本身而非對(duì)象的,所以需要使用范圍解析操作符“::”來(lái)連接類(lèi)名和類(lèi)常量訪問(wèn)。如果在類(lèi)的內(nèi)部訪問(wèn)類(lèi)的常量,還可以使用關(guān)鍵字self來(lái)代替類(lèi)名,最后將常量的值輸出。需要注意的是,在類(lèi)中定義的常量只能是基本數(shù)據(jù)類(lèi)型的值,并且必須是一個(gè)定值,不能是變量、類(lèi)的屬性、數(shù)學(xué)運(yùn)算的結(jié)果或函數(shù)調(diào)用。類(lèi)常量一旦設(shè)置后就不能改變,如果試圖在程序中改變它的值,則會(huì)出現(xiàn)錯(cuò)誤。并且在聲明類(lèi)常量時(shí)一定要賦初始值,因?yàn)楹笃跊](méi)有其他方式為其賦值。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象2.靜態(tài)屬性有時(shí)希望某些特定的數(shù)據(jù)在內(nèi)存中只有一份,并且可以被類(lèi)的所有實(shí)例對(duì)象所共享。例如,某個(gè)學(xué)校所有學(xué)生共享一個(gè)學(xué)校名稱(chēng),此時(shí)完全不必在每個(gè)學(xué)生對(duì)象所占用的內(nèi)容空間都定義一個(gè)字段來(lái)存儲(chǔ)這個(gè)學(xué)校名稱(chēng),可使用靜態(tài)屬性來(lái)表示學(xué)校名稱(chēng)讓所有對(duì)象來(lái)共享。定義靜態(tài)屬性的語(yǔ)法格式如下:在上述語(yǔ)法格式中,static關(guān)鍵字寫(xiě)在訪問(wèn)修飾符的后面,訪問(wèn)修飾符可以省略,默認(rèn)為public。為了更好地理解靜態(tài)屬性,接下來(lái)通過(guò)一個(gè)案例來(lái)演示,見(jiàn)例7-4。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象【例7-4】上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象運(yùn)行結(jié)果如圖7-3所示。在例7-4中,學(xué)生1和學(xué)生2的學(xué)校都是“bhcy”,這是由于在student類(lèi)中定義了一個(gè)靜態(tài)字段schoolName,該字段會(huì)被所有Student類(lèi)的實(shí)例共享,因此,在調(diào)用學(xué)生1和學(xué)生2的show()方法時(shí),均輸出“我的學(xué)校是:bhcy”。需要注意的是,靜態(tài)屬性屬于類(lèi)而非對(duì)象,所以不能使用“對(duì)象→屬性”的方式來(lái)訪問(wèn),而應(yīng)該通過(guò)“類(lèi)名::屬性”的方式來(lái)訪問(wèn)。如果是在類(lèi)的內(nèi)部,還可以使用self關(guān)鍵字代替類(lèi)名。3.靜態(tài)方法有時(shí)希望在不創(chuàng)建對(duì)象的情況下就可以調(diào)用某個(gè)方法,也就是使該方法不必和對(duì)象綁在一起。要實(shí)現(xiàn)這樣的效果,可以使用靜態(tài)方法。靜態(tài)方法在定義時(shí)只需在方法名前加上static關(guān)鍵字,其語(yǔ)法格式如下:上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象靜態(tài)方法的使用規(guī)則和靜態(tài)屬性相同,即通過(guò)類(lèi)名稱(chēng)和范圍解析操作符(::)來(lái)訪問(wèn)靜態(tài)方法。接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)靜態(tài)方法的使用,見(jiàn)例7-5?!纠?-5】運(yùn)行結(jié)果如圖7-4所示。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象在例7-5中,代碼第4行中定義了一個(gè)靜態(tài)屬性schoolName,在第5~7行代碼中,定義了一個(gè)靜態(tài)方法來(lái)輸出學(xué)生所在學(xué)校的名稱(chēng)。在第9行代碼中通過(guò)“類(lèi)名::方法名”的形式調(diào)用了Student類(lèi)的靜態(tài)方法,在靜態(tài)方法中訪問(wèn)了靜態(tài)屬性$SchoolName,通常情況下靜態(tài)方法是用來(lái)操作靜態(tài)屬性的。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象7.2.4 構(gòu)造函數(shù)構(gòu)造函數(shù)是類(lèi)中的一個(gè)特殊函數(shù)(或特殊方法),可在創(chuàng)建對(duì)象時(shí)自動(dòng)地加以調(diào)用。通常,可在構(gòu)造函數(shù)中完成一些必要的初始化任務(wù),如設(shè)置有關(guān)屬性的初值、創(chuàng)建所需要的其他對(duì)象等。在PHP4及以前的版本中,構(gòu)造函數(shù)的名稱(chēng)必須與類(lèi)名相同。而在PHP5中,構(gòu)建函數(shù)的名稱(chēng)則是固定的,即必須為
construct(函數(shù),其中的“
”為兩個(gè)下劃線),而不再與類(lèi)名相同。這樣,當(dāng)類(lèi)名改變時(shí),無(wú)須再修改構(gòu)造函數(shù)的名稱(chēng)。與其他的函數(shù)一樣,構(gòu)造函數(shù)既可以帶參數(shù),也可以不帶參數(shù)。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象當(dāng)然,為保證向下的兼容性,PHP5仍然允許在類(lèi)中定義相應(yīng)的與類(lèi)名同名的方法。在這種情況下,如果沒(méi)有
construct函數(shù),那么與類(lèi)名同名的方法便是所在類(lèi)的構(gòu)造函數(shù);反之,如果存在
construct函數(shù),那么與類(lèi)名同名的方法就不是所在類(lèi)的構(gòu)造函數(shù)了。在PHP5中創(chuàng)建對(duì)象時(shí),將首先搜索有沒(méi)有
construct函數(shù),未找到時(shí)再繼續(xù)搜索有沒(méi)有與類(lèi)名同名的方法。接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)構(gòu)造函數(shù)的使用,見(jiàn)例7-6。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象【例7-6】上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象在該案例中,學(xué)生類(lèi)student的構(gòu)造函數(shù)
construct()的功能為設(shè)置學(xué)生的學(xué)號(hào)、姓名和性別(在此也可以將構(gòu)造函數(shù)命名為student)。由于學(xué)生類(lèi)student定義有構(gòu)造函數(shù),因此,在創(chuàng)建學(xué)生對(duì)象時(shí),可自動(dòng)調(diào)用并完成相應(yīng)的設(shè)置學(xué)生信息的功能。該案例的運(yùn)行結(jié)果如圖7-5所示。7.2.5 析構(gòu)函數(shù)與構(gòu)造函數(shù)一樣,析構(gòu)函數(shù)也是類(lèi)中的一個(gè)特殊函數(shù)(或特殊方法)。但與構(gòu)造函數(shù)相反,析構(gòu)函數(shù)是在銷(xiāo)毀對(duì)象時(shí)被自動(dòng)調(diào)用的。通常,可在析構(gòu)函數(shù)中執(zhí)行一些在銷(xiāo)毀對(duì)象前所必須完成的操作。在PHP4及以前的版本中,是沒(méi)有析構(gòu)函數(shù)的。而在PHP5中,則可以使用析構(gòu)函數(shù),且其名稱(chēng)是固定的,即必須為_(kāi)_destruct(其中的“
”為兩個(gè)下劃線)。與構(gòu)造函數(shù)不同,析構(gòu)函數(shù)是不能帶有任何參數(shù)的。接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)析構(gòu)函數(shù)的使用,見(jiàn)例7-7。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象【例7-7】上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象在該案例的學(xué)生類(lèi)student中,既包含有構(gòu)造函數(shù),也包含有析構(gòu)函數(shù),因此,在創(chuàng)建與銷(xiāo)毀學(xué)生對(duì)象時(shí),將自動(dòng)對(duì)其進(jìn)行調(diào)用。該案例的運(yùn)行結(jié)果如圖7-6所示。7.2.6 繼承在現(xiàn)實(shí)生活中,繼承一般指的是子女繼承父輩的財(cái)產(chǎn)。在程序中,繼承描述的是事物之間的所屬關(guān)系,通過(guò)繼承可以使多種事物之間形成一種關(guān)系體系。在PHP中,類(lèi)的繼承是指在一個(gè)現(xiàn)有類(lèi)的基礎(chǔ)上去構(gòu)建一個(gè)新的類(lèi)。構(gòu)建出來(lái)的新類(lèi)被稱(chēng)作子類(lèi),現(xiàn)有類(lèi)被稱(chēng)作父類(lèi),子類(lèi)會(huì)自動(dòng)擁有父類(lèi)所有可繼承的屬性和方法。在程序中,如果想聲明一個(gè)類(lèi)繼承另一個(gè)類(lèi),需要使用extends關(guān)鍵字,具體語(yǔ)法格式如下:上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象為了讓初學(xué)者更好地學(xué)習(xí)繼承,接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)子類(lèi)如何繼承父類(lèi),見(jiàn)例7-8?!纠?-8】上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象運(yùn)行結(jié)果如圖7-7所示。在案例7-8中,Cat類(lèi)通過(guò)extends關(guān)鍵字繼承了Animal類(lèi),這樣Cat類(lèi)便是Animal類(lèi)的子類(lèi)。從運(yùn)行結(jié)果不難看出,子類(lèi)雖然沒(méi)有定義name屬性和shout()方法,但是卻能訪問(wèn)這兩個(gè)成員。這就說(shuō)明,子類(lèi)在繼承父類(lèi)的時(shí)候,會(huì)自動(dòng)擁有父類(lèi)的成員。在繼承關(guān)系中,子類(lèi)會(huì)自動(dòng)繼承父類(lèi)中定義的方法,但有時(shí)在子類(lèi)中需要對(duì)繼承的方法進(jìn)行一些修改,即對(duì)父類(lèi)的方法進(jìn)行重寫(xiě)。需要注意的是,在子類(lèi)中重寫(xiě)的方法需要和父類(lèi)被重寫(xiě)的方法具有相同的方法名、參數(shù)。案例7-8中,Cat類(lèi)從Animal類(lèi)繼承了shout()方法,該方法在被調(diào)用時(shí)會(huì)打印“動(dòng)物發(fā)出叫聲”,這明顯不能描述一種具體動(dòng)物的叫聲,Cat類(lèi)對(duì)象表示貓科,發(fā)出的叫聲應(yīng)該是“喵喵”。為了解決這個(gè)問(wèn)題,可以在Cat類(lèi)中重寫(xiě)父類(lèi)Animal中的shout()方法,具體代碼見(jiàn)案例7-9。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象【例7-9】運(yùn)行結(jié)果如圖7-8所示。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象案例7-9中,定義了Cat類(lèi)并且繼承自Animal類(lèi)。在子類(lèi)Cat中定義了一個(gè)shout()方法對(duì)父類(lèi)的方法進(jìn)行重寫(xiě)。從運(yùn)行結(jié)果可以看出,在調(diào)用Cat類(lèi)對(duì)象的shout()方法時(shí),只會(huì)調(diào)用子類(lèi)重寫(xiě)的該方法,并不會(huì)調(diào)用父類(lèi)的shout()方法。如果想要調(diào)用父類(lèi)中被重寫(xiě)的方法,就需要使用parent關(guān)鍵字,parent關(guān)鍵字用于訪問(wèn)父類(lèi)的成員。由于parent關(guān)鍵字引用的是一個(gè)類(lèi)而不是一個(gè)對(duì)象,因此,需要使用范圍解析操作符(::)。接下來(lái)通過(guò)一個(gè)案例來(lái)演示如何使用parent關(guān)鍵字訪問(wèn)父類(lèi)成員方法,見(jiàn)案例7-10。上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象【例7-10】上一頁(yè)下一頁(yè)返回7.2 類(lèi)和對(duì)象運(yùn)行結(jié)果如圖7-9所示。案例7-10中,定義了一個(gè)Cat類(lèi)繼承Animal類(lèi),并重寫(xiě)了Animal類(lèi)的shout()方法。在子類(lèi)Cat的shout()方法中使用“parent::shout();”調(diào)用了父類(lèi)被重寫(xiě)的方法。從運(yùn)行結(jié)果可以看出,子類(lèi)通過(guò)parent關(guān)鍵字可以成功地訪問(wèn)父類(lèi)的成員方法。上一頁(yè)返回7.3 高級(jí)應(yīng)用為了在PHP中更好地使用面向?qū)ο蟮姆绞竭M(jìn)行編程,還應(yīng)掌握一些相關(guān)的高級(jí)技術(shù),如類(lèi)抽象類(lèi)、接口等內(nèi)容。7.3.1 final關(guān)鍵字繼承為程序編寫(xiě)帶來(lái)了巨大的靈活性,但有時(shí)可能需要在繼承的過(guò)程中保證某些類(lèi)或方法不被改變,此時(shí)就需要使用final關(guān)鍵字。final關(guān)鍵字有“無(wú)法改變”或者“最終”的含義,因此被final修飾的類(lèi)和成員方法不能被修改。接下來(lái)將針對(duì)final關(guān)鍵字進(jìn)行詳細(xì)講解。1.final關(guān)鍵字修飾類(lèi)PHP中的類(lèi)被final關(guān)鍵字修飾后,該類(lèi)將不可以被繼承,也就是不能夠派生子類(lèi)。2.final關(guān)鍵字修飾方法當(dāng)一個(gè)類(lèi)的方法被final關(guān)鍵字修飾后,這個(gè)類(lèi)的子類(lèi)將不能重寫(xiě)該方法。接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)一下,見(jiàn)案例7-11。下一頁(yè)返回7.3 高級(jí)應(yīng)用【例7-11】上一頁(yè)下一頁(yè)返回7.3 高級(jí)應(yīng)用例7-11中,Cat類(lèi)重寫(xiě)父類(lèi)Animal中的shout()方法后,編譯報(bào)錯(cuò)。這是因?yàn)锳nimal類(lèi)的shout()方法被final所修飾。由此可見(jiàn),被final關(guān)鍵字修飾的方法為最終方法,子類(lèi)不能對(duì)該方法進(jìn)行重寫(xiě)。正是由于final的這種特性,當(dāng)在父類(lèi)中定義某個(gè)方法時(shí),如果不希望被子類(lèi)重寫(xiě),就可以使用final關(guān)鍵字修飾該方法。7.3.2 抽象類(lèi)與抽象方法在PHP5中,除了一般的類(lèi)與方法以外,還可以定義和使用相應(yīng)的抽象類(lèi)與抽象方法,其中,抽象方法是指使用關(guān)鍵字abstract定義的尚未實(shí)現(xiàn)(即沒(méi)有任何代碼)且無(wú)任何參數(shù)的,以分號(hào)“;”結(jié)束的方法,而抽象類(lèi)則是指使用關(guān)鍵字abstract定義的包含有一個(gè)或多個(gè)抽象方法的類(lèi)。上一頁(yè)下一頁(yè)返回7.3 高級(jí)應(yīng)用抽象類(lèi)是不能被實(shí)例化的,但允許被繼承。通過(guò)繼承抽象類(lèi),可以生成相應(yīng)的子類(lèi),并在其中全部或部分實(shí)現(xiàn)有關(guān)的抽象方法。抽象方法被實(shí)現(xiàn)后便成為一般的方法,而抽象類(lèi)中所有的抽象方法均被實(shí)現(xiàn)后,便成為一般的可被實(shí)例化的類(lèi)。通常,可將抽象類(lèi)作為其子類(lèi)的模板來(lái)看待,而其所包含的抽象方法則可作為相應(yīng)的一般方法的占位符來(lái)看待。為了讓初學(xué)者更好地學(xué)習(xí)繼承,接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)抽象類(lèi)與抽象方法,見(jiàn)例7
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 水庫(kù)流域水資源綜合管理
- 污水處理廠擴(kuò)容項(xiàng)目風(fēng)險(xiǎn)評(píng)估報(bào)告
- 河道水文氣象一體化監(jiān)測(cè)
- 綠色施工管理措施方案
- 鋼結(jié)構(gòu)基礎(chǔ)與上部結(jié)構(gòu)連接方案
- 管網(wǎng)改造施工隊(duì)伍管理方案
- 磷礦選礦項(xiàng)目節(jié)能評(píng)估報(bào)告
- 園林古建筑墻面修復(fù)方案
- 2025脛骨高位截骨治療膝關(guān)節(jié)退行性病變的適應(yīng)證指南 (1)課件
- 2025婦科腫瘤綜合治療后下肢淋巴水腫患者居家管理指南課件
- 2026年度內(nèi)蒙古自治區(qū)行政執(zhí)法人員專(zhuān)場(chǎng)招收備考題庫(kù)完整答案詳解
- 安全保密管理專(zhuān)題培訓(xùn)課件
- 農(nóng)產(chǎn)品采購(gòu)合同2025年協(xié)議
- 2025年江蘇省公務(wù)員錄用考試行測(cè)題A類(lèi)答案及解析
- 道路危險(xiǎn)貨物運(yùn)輸企業(yè)安全隱患排查與治理制度
- 京東物流合同范本
- 養(yǎng)老機(jī)構(gòu)安全生產(chǎn)責(zé)任制清單
- 《紅巖》中考試題(解析版)-2026年中考語(yǔ)文名著復(fù)習(xí)核心知識(shí)梳理與專(zhuān)項(xiàng)訓(xùn)練
- 非洲鼓基礎(chǔ)知識(shí)培訓(xùn)課件
- 2026-2031中國(guó)釀酒設(shè)備行業(yè)市場(chǎng)現(xiàn)狀調(diào)查及投資前景研判報(bào)告
- KET考試必背核心短語(yǔ)(按場(chǎng)景分類(lèi))
評(píng)論
0/150
提交評(píng)論