《PHP面向對象編程》課件_第1頁
《PHP面向對象編程》課件_第2頁
《PHP面向對象編程》課件_第3頁
《PHP面向對象編程》課件_第4頁
《PHP面向對象編程》課件_第5頁
已閱讀5頁,還剩40頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

PHP面向對象編程PHP面向對象編程2025/3/20主要內容面向對象編程的基礎知識PHP5中面向對象編程的基本技術PHP5中面向對象編程的高級技術2025/3/20面向對象編程的基礎知識什么叫面向對象(OOPObjectOrientedProgramming)起初,“面向對象”是專指在程序設計中采用封裝、繼承、多態等設計方法。但這個定義顯然不能再適合現在情況。面向對象的思想已經涉及到軟件開發的各個方面。如,面向對象的分析(OOA,ObjectOrientedAnalysis),面向對象的設計(OOD,ObjectOrientedDesign)、以及我們經常說的面向對象的編程實現(OOP,ObjectOrientedProgramming)。2025/3/20面向對象的基本概念對象:對象是人們要進行研究的任何事物,它不僅能表示具體的事物還可以是抽象的事物.對象的屬性和行為:對象用數據值來描述狀態。行為就是操作可以改變對象的狀態.類:具有相同特性(數據元素)和行為(功能)的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,類實際上就是一種數據類型。類的屬性與方法通常又統稱為類的成員。2025/3/20面向對象的特征封裝:類定義將其說明(用戶可見的外部接口)與實現(用戶不可見的內部實現)顯式地分開,其內部實現按其具體定義的作用域提供保護繼承是指子類可以擁有父類所有的屬性和方法,除了這些以外,子類自己還可以創建新的方法和屬性多態:同一操作作用在不同對象上所的結果不一樣,這就是多態。也就是同一函數在不同的對象中所實現的功能不一樣。2025/3/20創建類定義類classClassName{//包含屬性和方法}class:關鍵字,說明聲明了一個類ClassName:類名。滿足標識符的規定2025/3/20創建對象對象是通過類實例化出來的,使用new關鍵字來生成一個對象語法:$對象名稱=new類名稱();如定義了Person后,創建該類的對象$p1=newPerson();$p2=newPerson();2025/3/20使用對象中的成員PHP對象中的成員有兩種一種是成員屬性,一種是成員方法.訪問對象中的成員就要使用一個特殊的操作符“->”來完成對象成員的訪問.語法:對象->屬性對象->方法如:$p1->name;$p1->age;$p1->sex;$p1->say();$p2->run();2025/3/20$this的使用在類的外部,訪問對象中的成員,可通過“對象->成員”的形式在類的內部,訪問類的成員(屬性或方法),使用”$this->成員“,代表本對象的引用如:

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論