




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
雷涵legendhb@2015-12PHP面向對象介紹面向對象的好處易維護采用面向對象思想設計的結構,可讀性高,由于繼承的存在,即使改變需求,那么維護也只是在局部模塊,所以維護起來是非常方便和較低成本的質(zhì)量高在設計時,可重用現(xiàn)有的,在以前的項目的領域中已被測試過的類使系統(tǒng)滿足業(yè)務需求并具有較高的質(zhì)量效率高在軟件開發(fā)時,根據(jù)設計的需要對現(xiàn)實世界的事物進行抽象,產(chǎn)生類。使用這樣的方法解決問題,接近于日常生活和自然的思考方式,勢必提高軟件開發(fā)的效率和質(zhì)量易擴展由于繼承、封裝、多態(tài)的特性,自然設計出高內(nèi)聚、低耦合的系統(tǒng)結構,使得系統(tǒng)更靈活、更容易擴展,而且成本較低面向對象特性封裝通過定義良好的接口與外部交互,隱藏內(nèi)部細節(jié),對使用者透明;繼承是一種聯(lián)結類的層次模型,提供了一種描述共性的方法,從基類中派生出子類,提高了類的重用多態(tài)根據(jù)使用類的上下文來重新定義或改變類的屬性或方法面向對象概念類類是具有相同屬性和行為的一組對象的描述和定義。對象在類的定義基礎上創(chuàng)建出來的實體稱為對象。類與對象的關系如同模具與鑄件的關系,類的實例化結果就是對象,而對對象的抽象就是類PHP中定義類通過class關鍵字定義類classStudent{ public$name; protected$class; private$sex; publicfunctionstudy(){ //函數(shù)體 echo“{$this->name}isstudying”; } publicfunctionhaveLunch(){ //函數(shù)體 }}PHP中使用對象通過new關鍵字實例化對象通過->訪問方法和屬性在對象內(nèi)部通過$this訪問自身方法/屬性$user=newStudent(); //實例化一個Student對象并賦給$user變量$user->name=“小吳”; //修改屬性echo$user->name; //訪問屬性$user->study(); //調(diào)用成員方法對象的傳遞對象的傳遞通過引用方式通過clone關鍵字克隆對象$user=newStudent();$user->name=“小王”;test($user);echo$user->name; //小劉functiontest($user){ $user->name=“小劉”;}$user=newStudent();$user->name=“小王”;test($user);echo$user->name; //小王functiontest($user){ $user=clone$user; $user->name=“小劉”;}訪問權限public
公共作用域,內(nèi)部、外部及子類都可以直接訪問protected
保護作用域,內(nèi)部、子類可以操作,外部不能訪問private
僅內(nèi)部可訪問,子類及外部不允許訪問static
聲明為靜態(tài)方法/變量,不需要實例化就可以直接訪問final
子類中將不允許覆蓋這個屬性課堂練習寫一個學生Student類其具有表單中的屬性,且屬性均為protected其具有setAttributes()方法,傳入一個數(shù)組,設置對應的屬性值其具有dump()方法,將所有屬性值打印出來構造函數(shù)構造函數(shù)在實例化對象的時候自動執(zhí)行通常用于做類的初始化,例如屬性賦值、連接資源等classHuman{
private$name;private$sex;private$idcard;
publicfunction__construct(){echo"Humanconstructed...\n";}}publicfunction__construct($name,$sex,$idcard){$this->name=$name;$this->sex=$sex;$this->idcard=$idcard;}析構函數(shù)析構函數(shù)在對象被銷毀時自動執(zhí)行通常用于處理變量銷毀,內(nèi)存回收,關閉連接資源等classHuman{
private$name;private$sex;private$idcard;
publicfunction__destruct(){echo($this->name?$this->name:"Human")."hasdestructed\n";}}publicfunction__destruct(){$this->db->close(); //斷開數(shù)據(jù)庫連接fclose($this->fp); //關閉文件}課堂練習建立如上錯誤日志表寫一個Logger類classLogger{},用于往數(shù)據(jù)表中插入程序日志在程序結束后,自動往表中插入一條type為0,信息為“程序正常退出”的日志靜態(tài)成員使用static修飾符聲明靜態(tài)屬性/方法靜態(tài)屬性/方法與對象無關,是類的成員,在類內(nèi)部通過self訪問,外部通過類名訪問classHuman{private$name;private$sex;private$idcard;privatestatic$objCount=0;publicfunction__construct(){self::$objCount++; //每一次的對象實例化都+1echo"Humanconstructed...\n";}publicstaticfunctiongetObjectCount(){returnself::$objCount;}Human::getObjectCount();常量使用const關鍵字定義常量,常量只能是標量常量一旦定義不能重新賦值,通過類名::常量名訪問classLogger{
constTYPE_NOTICE=0;constTYPE_WARNING=1;constTYPE_ERROR=2;}Logger::TYPE_NOTICE //0$log=newLogger();$log::TYPE_ERROR; //2課堂練習為上題所設計的Logger類預置幾種類型常量為該類添加靜態(tài)變量Logger::$typeLabels,在輸出錯誤列表時使用Logger::$typeLabels[type]就可以直接顯示可讀的錯誤類型,想想這樣的好處類的繼承使用extends關鍵字聲明繼承關系子類擁有父類所有的屬性和方法子類可自行添加或覆蓋屬性和方法classStudentextendsHuman{}$stu=newStudent();$stu->setName("XiaoWang");$stu->setSex("1");$stu->setIdcard("350784198898989898");$stu->setStuno("122622007050");$stu->eat('vegetable');$stu->selfIntroducing();類的繼承父類聲明為private,子類中聲明使用更寬松的作用域重復聲明時,二者會同時存在且互補干擾父類中聲明為protected或public,子類中重復聲明將覆蓋,并且不能聲明為更低的訪問權限重寫方法后,可以通過parent::methodName()來訪問父級方法publicfunctioneat($what){parent::eat($what);echo"Andmystunois:{$this->stuno}\n";
}類的繼承子類沒有構造函數(shù)時,父類的構造函數(shù)會被自動調(diào)用如果子類覆蓋了構造函數(shù),父類的構造函數(shù)會被忽略,除非在子類構造函數(shù)中通過parent::__construct()顯示調(diào)用classStudentextendsHuman{
protected$stuno;
publicfunction__construct(){parent::__construct();//子類中的構造函數(shù)體
}延遲靜態(tài)綁定由于self關鍵詞會在編譯時就確定其作用域,所以在繼承中使用靜態(tài)變量時會出現(xiàn)問題,通過static解決classHuman{
protectedstatic$label="Human";
publicfunctiongetLabel(){returnstatic::$label;
}}classStudentextendsHuman{
protectedstatic$label="Student";}$stu=newStudent();$stu->getLabel();課堂練習將之前寫的Logger類改為基類實現(xiàn)DbLogger及FileLogger兩個子類,繼承自Logger類,分別實現(xiàn)將日志插入數(shù)據(jù)表及寫入文件的操作細細體會通過這種繼承的方式有什么好處?抽象類使用abstract關鍵字定義抽象類及抽象方法abstractclassLogger{protected$config;protected$logHandler;
publicfunction__construct($config){$this->config=$config;$this->init();}
abstractpublicfunctionlog($msg,$type=0);
abstractprotectedfunctioninit();
}抽象類抽象類不能被實例化,否則將導致出錯抽象類定義的抽象方法在子類中必須被實現(xiàn)且參數(shù)一致classFileLoggerextendsLogger{
publicfunctionlog($msg,$type=0){$now=date("Y-m-dH:i:s");fwrite($this->logHandler,"{$type}\t{$msg}\t{$now}\n");returntrue;}
protectedfunctioninit(){$this->logHandler=fopen($this->config['filename'],'a');}}課堂練習將Logger類改為抽象類將log()及createHandler()兩個方法寫為抽象類嘗試實例化Logger類,看看結果類的自動加載通過全局函數(shù)__autoload($className)實現(xiàn)類的自動加載所有可以通過自動加載的類文件名及路徑按照定義的規(guī)范function__autoload($className){ $fileName=”classes\{$className}.class.php"; if(file_exists($fileName)){ require$fileName; }}類的自動加載定義“類名”=>“文件名”的映射數(shù)組來進行自動加載類的自動加載__autoload()函數(shù)全局只能唯一在引用第三方類庫時,可能每個類庫有自己內(nèi)部的自動加載機制(例如有的使用classMap,有的通過類名解析出目錄結構)PHP5.1后引入spl_autoload機制,通過spl_autoload_register()注冊多個自動加載函數(shù)課堂練習寫一個autoload()函數(shù)用來自動加載Logger、DbLogger、FileLogger等類嘗試修改這幾個類的文件名,修改autoload()函數(shù),切實理解自動加載的機制命名空間在PHP中,類名必須全局唯一同時包含兩個同名的類將導致Fatal
Error在引入第三方類庫時難以避免類名沖突,故引入命名空間在類文件的頂部通過namespace關鍵字聲明命名空間命名空間通過聲明本腳本屬于指定命名空間來調(diào)用同命名空間內(nèi)的類通過use關鍵字來指定需要使用的類在實例化時使用完整路徑來指定需要使用的類遍歷對象可以使用foreach來遍歷對象,對象內(nèi)的所有可訪問屬性將被遍歷在類的內(nèi)部遍歷自身屬性,根據(jù)訪問權限進行遍歷魔術方法PHP中將以兩個下劃線__開頭的類方法保留,稱之為魔術方法常用的魔術方法有__set(),__get(),__call(),__toString()構造函數(shù)和析構函數(shù)也屬于魔術方法魔術方法編寫__toSt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度知識產(chǎn)權贈與及許可協(xié)議書范文
- 二零二五年度資料員招聘與知識產(chǎn)權保護與運用協(xié)議
- 2025年度電力設備安裝與檢修服務合同
- 二零二五年度科研機構實驗室年租房合同
- 二零二五年度廣告公司兼職設計師合作協(xié)議
- 2025年度珠寶玉石進出口貿(mào)易合同
- 網(wǎng)絡安全防御策略知識題庫
- 探索阿凡提的故事的寓言色彩
- 農(nóng)業(yè)環(huán)境保護工作要點
- 公司年度運營計劃與目標分解書
- 零星工程(零星用工)簽認單
- 氬氣安全技術說明書MSDS
- 四年級數(shù)學下冊教案-練習一-北師大版
- 5G手機無線通訊濾波芯片產(chǎn)業(yè)化項目環(huán)境影響報告表
- 《對外援援助成套項目勘察設計取費標準內(nèi)部暫行規(guī)定(稿)》
- 通用反應單元工藝
- 空冷塔施工方案
- 電飯煲的智能控制系統(tǒng)設計
- 儲罐玻璃鋼內(nèi)防腐
- 2013-2015北京地鐵部分線路年客流量
- 機械設計說明書
評論
0/150
提交評論