《PHP面向?qū)ο缶幊獭氛n件_第1頁
《PHP面向?qū)ο缶幊獭氛n件_第2頁
《PHP面向?qū)ο缶幊獭氛n件_第3頁
《PHP面向?qū)ο缶幊獭氛n件_第4頁
《PHP面向?qū)ο缶幊獭氛n件_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PHP面向?qū)ο缶幊蘌HP面向?qū)ο缶幊?025/3/20主要內(nèi)容面向?qū)ο缶幊痰幕A知識PHP5中面向?qū)ο缶幊痰幕炯夹gPHP5中面向?qū)ο缶幊痰母呒壖夹g2025/3/20面向?qū)ο缶幊痰幕A知識什么叫面向?qū)ο?OOPObjectOrientedProgramming)起初,“面向?qū)ο蟆笔菍V冈诔绦蛟O計中采用封裝、繼承、多態(tài)等設計方法。但這個定義顯然不能再適合現(xiàn)在情況。面向?qū)ο蟮乃枷胍呀?jīng)涉及到軟件開發(fā)的各個方面。如,面向?qū)ο蟮姆治觯∣OA,ObjectOrientedAnalysis),面向?qū)ο蟮脑O計(OOD,ObjectOrientedDesign)、以及我們經(jīng)常說的面向?qū)ο蟮木幊虒崿F(xiàn)(OOP,ObjectOrientedProgramming)。2025/3/20面向?qū)ο蟮幕靖拍顚ο?對象是人們要進行研究的任何事物,它不僅能表示具體的事物還可以是抽象的事物.對象的屬性和行為:對象用數(shù)據(jù)值來描述狀態(tài)。行為就是操作可以改變對象的狀態(tài).類:具有相同特性(數(shù)據(jù)元素)和行為(功能)的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,類實際上就是一種數(shù)據(jù)類型。類的屬性與方法通常又統(tǒng)稱為類的成員。2025/3/20面向?qū)ο蟮奶卣鞣庋b:類定義將其說明(用戶可見的外部接口)與實現(xiàn)(用戶不可見的內(nèi)部實現(xiàn))顯式地分開,其內(nèi)部實現(xiàn)按其具體定義的作用域提供保護繼承是指子類可以擁有父類所有的屬性和方法,除了這些以外,子類自己還可以創(chuàng)建新的方法和屬性多態(tài):同一操作作用在不同對象上所的結(jié)果不一樣,這就是多態(tài)。也就是同一函數(shù)在不同的對象中所實現(xiàn)的功能不一樣。2025/3/20創(chuàng)建類定義類classClassName{//包含屬性和方法}class:關鍵字,說明聲明了一個類ClassName:類名。滿足標識符的規(guī)定2025/3/20創(chuàng)建對象對象是通過類實例化出來的,使用new關鍵字來生成一個對象語法:$對象名稱=new類名稱();如定義了Person后,創(chuàng)建該類的對象$p1=newPerson();$p2=newPerson();2025/3/20使用對象中的成員PHP對象中的成員有兩種一種是成員屬性,一種是成員方法.訪問對象中的成員就要使用一個特殊的操作符“->”來完成對象成員的訪問.語法:對象->屬性對象->方法如:$p1->name;$p1->age;$p1->sex;$p1->say();$p2->run();2025/3/20$this的使用在類的外部,訪問對象中的成員,可通過“對象->成員”的形式在類的內(nèi)部,訪問類的成員(屬性或方法),使用”$this->成員“,代表本對象的引用如:

2025/3/20構(gòu)造方法構(gòu)造方法是特殊方法。當使用new這個關鍵字來創(chuàng)建一個對象時,它將自動調(diào)用構(gòu)造方法。PHP5中,構(gòu)造方法的名稱統(tǒng)一為__construct()。PHP4中如果一個方法與類同名時,這個方法將成為構(gòu)造方法.與類同名的構(gòu)造方法在PHP5中仍然可以用,但現(xiàn)在很少有人用,這樣做的好處是可以使構(gòu)造函數(shù)獨立于類名,當類名發(fā)生改變時不需要改相應的構(gòu)造函數(shù)構(gòu)造方法可以給對象做初始化的工作格式:function__construct([參數(shù)]){......}2025/3/20構(gòu)造方法注意:當與類同名的構(gòu)造方法和__construct()同時存在時,后者優(yōu)先調(diào)用有參構(gòu)造方法創(chuàng)建對象,必須向構(gòu)造方法中傳參。$p=newPerson("張三",20);定義構(gòu)造方法時可以給參數(shù)設置默認值,如此,可以調(diào)用無參的構(gòu)造方法創(chuàng)建對象。2025/3/20析構(gòu)方法PHP5中,引入析構(gòu)方法的概念,可以及時釋放對象所占用的內(nèi)存析構(gòu)方法__destruct()該方法沒有參數(shù),也沒有返回值該方法在腳本關閉或?qū)ο笠帽粍h除前被調(diào)用析構(gòu)方法可用于關閉數(shù)據(jù)庫,關閉文件或其他掃尾工作function__destruct(){echo"對象即將銷毀";}2025/3/20封裝封裝是面向?qū)ο笕筇卣髦?,含義有兩層:把對象的屬性和方法結(jié)合在一起盡可能隱藏對象的內(nèi)部細節(jié),對外只保留有限的接口反映在設計上就是,封裝可以保證對象以外的部分不能隨意讀寫對象的內(nèi)部數(shù)據(jù)PHP中封裝涉及到的三個關鍵字public,protected,private2025/3/20類成員的可見性為控制類成員的可見性,限定對屬性和方法的訪問,使用以下三種訪問修飾符public

表示全局,類內(nèi)部外部子類都可以訪問;protected表示受保護的,只有本類或子類或父類中可以訪問;private表示私有的,只有本類內(nèi)部可以使用;注意:只要屬性前有修飾符,要把var去掉,var等同public的訪問權(quán)限2025/3/20__set(),__get()方法應用__set()方法:該方法有兩個參數(shù),第一個參數(shù)為要設置值的屬性名,第二個參數(shù)是要給屬性設置的值,沒有返回值。在直接設置私有屬性值的時候自動調(diào)用.__get()方法:該方法用來獲取私有成員屬性值,有一個參數(shù),參數(shù)傳入你要獲取的成員屬性的名稱,返回獲取的屬性值,該直接獲取私有屬性的時候?qū)ο笞詣诱{(diào)用的注意:兩個方法是為了存取私有屬性,如果成員屬性不封裝成私有的,對象本身就不會去自動調(diào)用這兩個方法。2025/3/20繼承PHP中,只支持單重繼承通過繼承生成的子類,將自動擁用父類的有關屬性和方法(父類中的私有成員除外)子類還可以定義自己的新屬性和相應的新方法必要時,子類可重新聲明父類的同名屬性或重新定義父類的同名方法繼承使用extends關鍵字classBextendsA{

}2025/3/20繼承子類覆蓋父類中同名的方法時,在子類里可以使用如下兩個方法調(diào)用父類方法:一種是使用父類的“類名::”來調(diào)用父類中被覆蓋的方法;一種是使用“parent::”的方試來調(diào)用父類中被覆蓋的方法;2025/3/20訪問修飾符----protectedprotected的成員不能被該類的外部代碼訪問。但是該類的子類有訪問權(quán)限,可以進行屬性、方法的讀及寫操作,該子類的外部代碼包括其的子類都不具有訪問其屬性和方法的權(quán)限。2025/3/20final關鍵字Final可以修飾類和方法被final修飾的類不能被繼承被final修飾的方法不能被覆蓋2025/3/20static關鍵字static修飾的屬性是靜態(tài)屬性,靜態(tài)屬性是屬于類的,不屬于任何對象實例,這樣的屬性在內(nèi)存中只有一個,多個對象共用這一個屬性靜態(tài)屬性不可以由對象通過->操作符來訪問。靜態(tài)屬性由類名::$靜態(tài)屬性來訪問如:<?phpclassAA{public

static$a="PHP1";}echoAA::$a;?>2025/3/20static關鍵字static修飾的方法稱為靜態(tài)方法,靜態(tài)方法只能使用靜態(tài)成員,不能訪問非靜態(tài)成員靜態(tài)方法中訪問靜態(tài)屬性不能使用$this,而是使用

self::$靜態(tài)屬性或是類名::靜態(tài)屬性非靜態(tài)方法中訪問靜態(tài)屬性也是使用

self::$靜態(tài)屬性或是類名::靜態(tài)屬性類外訪問靜態(tài)方法可以使用類名::靜態(tài)方法直接調(diào)用,也可以使用對象直接調(diào)用2025/3/20const關鍵字PHP中定義常量使用define()函數(shù),但在類里使用const定義常量,常量的值不能被修改在類外面使用時使用類名::常量名(沒有$),方法內(nèi)使用時使用self::常量名如:2025/3/20__toString()方法當定義一個對象如:$a=newStudent();echo$a這時運行將報錯如果在類中定義__toString()方法,輸出對象引用時將自動調(diào)用該方法,并輸出該方法的返回值,且__toString()方法要有return語句2025/3/20克隆對象如果使用兩個或多個一樣的對象,可以使用clone關鍵字克隆出一模一樣的對象如果$t1=newPerson();$t2=$t1,則對其中任何一個做屬性的修改,都將影響另一個,而克隆的兩個對象互不打擾PHP5中定義了一個特殊的方法__clone(),在對象克隆時自動調(diào)用,如果想克隆后改變原對象的內(nèi)容,則需在該方法中重寫原本的屬性和方法。2025/3/20__call()方法處理調(diào)用錯誤使用對象調(diào)用方法時,如果方法不存在,運行時程序就會退出不能繼續(xù)執(zhí)行如果定義了__call()方法,在試圖使用對象調(diào)用不存在的方法時,就會提示調(diào)用的方法和使用的參數(shù)不存在,但程序仍可以繼續(xù)執(zhí)行該方法聲明時包含兩個參數(shù),第一個參數(shù)是string型,是調(diào)用不存在方法的方法名(如$fname),第二個參數(shù)是

array型,是調(diào)用的不存在的方法的參數(shù)(如$argus)。2025/3/20__autoload()

函數(shù)調(diào)用一個類的時候,必須要先將該類所在的文件引入(include“xxx.php”),如果我們在一個頁里調(diào)用的類很多,那么我們不得不使用許多的include“xxx.php”。顯然這樣很麻煩。遇到上述情況,只要定義__autoload()函數(shù)可以幫助我們解決問題該函數(shù)不是類方法,是獨立的方法,有一個string類型的參數(shù)是聲明不存在類的類名,如下:function__autoload($className){include$className.".php";}2025/3/20抽象方法和抽象類在類中沒有方法體的方法稱為抽象方法,即方法名后面沒有大括號和具體內(nèi)容,方法名后直接是分號.抽象方法使用abstract來修飾如:abstract

functionfun1();如果類中有抽象方法,那么該類就要被abstract修飾,該類稱為抽象類抽象類必須有抽象方法,但也可以有成員屬性和非抽象的方法2025/3/20抽象方法和抽象類抽象類是一種規(guī)范,要求子類去遵守,子類繼承抽象類后,按照子類的需要將抽象類中的抽象方法實現(xiàn)抽象方法是作為子類重載的模板來使用,子類繼承抽象類時必須將其中的抽象方法全部實現(xiàn),否則子類仍然不能被實例化2025/3/20接口PHP不支持多繼承,為了解決該問題,引入接口的概念抽象類是一種特殊的類,接口是一種特殊的抽象類,當類中所有的方法都是抽象方法時,此時就換一種稱謂,類就叫做接口接口中不能聲明變量,接口中所有的成員都是public權(quán)限的,包括子類實現(xiàn)時也要使用public權(quán)限接口的聲明interface接口名{}2025/3/20接口接口中可以定義常量,且要賦初值。接口中所有的方法都是抽象的,所以可以將abstract去掉接口中所有方法的訪問權(quán)限都是public,所以也可以將public去掉接口可以使用extends繼承其他接口2025/3/20接口的實現(xiàn)定義一個子類,使用關鍵字implements實現(xiàn)接口中的全部抽象方法一個類可以同時實現(xiàn)多個接口一個類既可以繼承一個父類,又可以同時實現(xiàn)多個接口2025/3/20instanceof運算符該運算符可以判斷一個對象是否是一個類的實例$c=newChild;if($cinstanceofChild)

echo“yes";輸出yes2025/3/20多態(tài)多態(tài)性是指一段程序能夠處理多種類型對象的能力PHP中雖然可以實現(xiàn)多態(tài),但和c++還有Java這些面向?qū)ο蟮恼Z言相比,多態(tài)性并不是那么突出,因為PHP本身就是一種弱類型的語言,不存在父類對象轉(zhuǎn)化為子類對象或者是子類對象轉(zhuǎn)化為父類對象的問題重載和重寫:PHP的同一個類中不能出現(xiàn)同名方法,所以所謂的重載其實和Java中的重寫類似,指的是在子類中可以重新定義父類中的方法。

2025/3/20對象串行化兩種情況我們必須把對象串行化,第一種情況就是把一個對象在網(wǎng)絡中傳輸?shù)臅r候要將對象串行化,第二種情況就是把對象寫入文件或是數(shù)據(jù)庫的時候用到串行化。串行化有兩個過程,一個是串行化,就是把對象轉(zhuǎn)化為二進制的字符串,我們使用serialize()函數(shù)來串行化一個對象,另一個是反串行化,就是把對象轉(zhuǎn)化的字符串再轉(zhuǎn)化為對象,我們使用unserialize()函數(shù)來反串行化一個對象.2025/3/20serialize()函數(shù)PHP中serialize()函數(shù)的參數(shù)為對象名,返回值為一個字符串,Serialize()返回的字符串含義模糊,一般我們不會解析這個串來得到對象的信息,我們只要把返回來的這個字符串傳到網(wǎng)絡另一端或是保存到方件中即可。2025/3/20unserialize()函數(shù)PHP中unserialize()函數(shù)來反串行化對象,這個函數(shù)的參數(shù)即為serialize()函數(shù)的返回值,輸出當然是重新組織好的對象.2025/3/20__sleep()函數(shù)和__wakeup()函數(shù)在對象串行化的時候,會調(diào)用一個__sleep()函數(shù)來完成一些睡前的事情;而在重新醒來,即由二進制串重新組成一個對象的時候,則會自動調(diào)用PHP的另一個函數(shù)__wakeup(),做一些對象醒來就要做的動作。__sleep()函數(shù)不接受任何參數(shù),但返回一個數(shù)組,其中包含需要串行化的屬性。末被包含的屬性將在串行化時被忽略,如果沒有__sleep()方法,PHP將保存所有屬性。2025/3/20課堂練習編寫一個圖書信息類Book。屬性受保護的,包括書名bookName,作者author,價格price提供有參構(gòu)造方法,析構(gòu)方法,訪問器方法(如果價格賦值不是數(shù)字,則將價格賦值為0),輸出圖書信息的方法displayBook。創(chuàng)建對象測試該類2025/3/20課堂練習編寫一個小說信息類Novel繼承Book類。添加私有屬性小說描述desc。添加有參構(gòu)造方法,允許使用者通過構(gòu)造方法為所有屬性賦值。重載displayBook方法,將小說所有信息以表格形式打印出來。提供克隆方法,當克隆一個新的小說對象時,要求將desc的值設為“待添加”。編寫displayDesc方法,用綠色背景的div顯示小說的描述信息。2025/3/20

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論