




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
雷涵legendhb@2015-12PHP面向?qū)ο蠼榻B面向?qū)ο蟮暮锰幰拙S護采用面向?qū)ο笏枷朐O(shè)計的結(jié)構(gòu),可讀性高,由于繼承的存在,即使改變需求,那么維護也只是在局部模塊,所以維護起來是非常方便和較低成本的質(zhì)量高在設(shè)計時,可重用現(xiàn)有的,在以前的項目的領(lǐng)域中已被測試過的類使系統(tǒng)滿足業(yè)務(wù)需求并具有較高的質(zhì)量效率高在軟件開發(fā)時,根據(jù)設(shè)計的需要對現(xiàn)實世界的事物進行抽象,產(chǎn)生類。使用這樣的方法解決問題,接近于日常生活和自然的思考方式,勢必提高軟件開發(fā)的效率和質(zhì)量易擴展由于繼承、封裝、多態(tài)的特性,自然設(shè)計出高內(nèi)聚、低耦合的系統(tǒng)結(jié)構(gòu),使得系統(tǒng)更靈活、更容易擴展,而且成本較低面向?qū)ο筇匦苑庋b通過定義良好的接口與外部交互,隱藏內(nèi)部細節(jié),對使用者透明;繼承是一種聯(lián)結(jié)類的層次模型,提供了一種描述共性的方法,從基類中派生出子類,提高了類的重用多態(tài)根據(jù)使用類的上下文來重新定義或改變類的屬性或方法面向?qū)ο蟾拍铑愵愂蔷哂邢嗤瑢傩院托袨榈囊唤M對象的描述和定義。對象在類的定義基礎(chǔ)上創(chuàng)建出來的實體稱為對象。類與對象的關(guān)系如同模具與鑄件的關(guān)系,類的實例化結(jié)果就是對象,而對對象的抽象就是類PHP中定義類通過class關(guān)鍵字定義類classStudent{ public$name; protected$class; private$sex; publicfunctionstudy(){ //函數(shù)體 echo“{$this->name}isstudying”; } publicfunctionhaveLunch(){ //函數(shù)體 }}PHP中使用對象通過new關(guān)鍵字實例化對象通過->訪問方法和屬性在對象內(nèi)部通過$this訪問自身方法/屬性$user=newStudent(); //實例化一個Student對象并賦給$user變量$user->name=“小吳”; //修改屬性echo$user->name; //訪問屬性$user->study(); //調(diào)用成員方法對象的傳遞對象的傳遞通過引用方式通過clone關(guān)鍵字克隆對象$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=“小劉”;}訪問權(quán)限public
公共作用域,內(nèi)部、外部及子類都可以直接訪問protected
保護作用域,內(nèi)部、子類可以操作,外部不能訪問private
僅內(nèi)部可訪問,子類及外部不允許訪問static
聲明為靜態(tài)方法/變量,不需要實例化就可以直接訪問final
子類中將不允許覆蓋這個屬性課堂練習(xí)寫一個學(xué)生Student類其具有表單中的屬性,且屬性均為protected其具有setAttributes()方法,傳入一個數(shù)組,設(shè)置對應(yīng)的屬性值其具有dump()方法,將所有屬性值打印出來構(gòu)造函數(shù)構(gòu)造函數(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;}析構(gòu)函數(shù)析構(gòu)函數(shù)在對象被銷毀時自動執(zhí)行通常用于處理變量銷毀,內(nèi)存回收,關(guān)閉連接資源等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); //關(guān)閉文件}課堂練習(xí)建立如上錯誤日志表寫一個Logger類classLogger{},用于往數(shù)據(jù)表中插入程序日志在程序結(jié)束后,自動往表中插入一條type為0,信息為“程序正常退出”的日志靜態(tài)成員使用static修飾符聲明靜態(tài)屬性/方法靜態(tài)屬性/方法與對象無關(guān),是類的成員,在類內(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關(guān)鍵字定義常量,常量只能是標量常量一旦定義不能重新賦值,通過類名::常量名訪問classLogger{
constTYPE_NOTICE=0;constTYPE_WARNING=1;constTYPE_ERROR=2;}Logger::TYPE_NOTICE //0$log=newLogger();$log::TYPE_ERROR; //2課堂練習(xí)為上題所設(shè)計的Logger類預(yù)置幾種類型常量為該類添加靜態(tài)變量Logger::$typeLabels,在輸出錯誤列表時使用Logger::$typeLabels[type]就可以直接顯示可讀的錯誤類型,想想這樣的好處類的繼承使用extends關(guān)鍵字聲明繼承關(guān)系子類擁有父類所有的屬性和方法子類可自行添加或覆蓋屬性和方法classStudentextendsHuman{}$stu=newStudent();$stu->setName("XiaoWang");$stu->setSex("1");$stu->setIdcard("350784198898989898");$stu->setStuno("122622007050");$stu->eat('vegetable');$stu->selfIntroducing();類的繼承父類聲明為private,子類中聲明使用更寬松的作用域重復(fù)聲明時,二者會同時存在且互補干擾父類中聲明為protected或public,子類中重復(fù)聲明將覆蓋,并且不能聲明為更低的訪問權(quán)限重寫方法后,可以通過parent::methodName()來訪問父級方法publicfunctioneat($what){parent::eat($what);echo"Andmystunois:{$this->stuno}\n";
}類的繼承子類沒有構(gòu)造函數(shù)時,父類的構(gòu)造函數(shù)會被自動調(diào)用如果子類覆蓋了構(gòu)造函數(shù),父類的構(gòu)造函數(shù)會被忽略,除非在子類構(gòu)造函數(shù)中通過parent::__construct()顯示調(diào)用classStudentextendsHuman{
protected$stuno;
publicfunction__construct(){parent::__construct();//子類中的構(gòu)造函數(shù)體
}延遲靜態(tài)綁定由于self關(guān)鍵詞會在編譯時就確定其作用域,所以在繼承中使用靜態(tài)變量時會出現(xiàn)問題,通過static解決classHuman{
protectedstatic$label="Human";
publicfunctiongetLabel(){returnstatic::$label;
}}classStudentextendsHuman{
protectedstatic$label="Student";}$stu=newStudent();$stu->getLabel();課堂練習(xí)將之前寫的Logger類改為基類實現(xiàn)DbLogger及FileLogger兩個子類,繼承自Logger類,分別實現(xiàn)將日志插入數(shù)據(jù)表及寫入文件的操作細細體會通過這種繼承的方式有什么好處?抽象類使用abstract關(guān)鍵字定義抽象類及抽象方法abstractclassLogger{protected$config;protected$logHandler;
publicfunction__construct($config){$this->config=$config;$this->init();}
abstractpublicfunctionlog($msg,$type=0);
abstractprotectedfunctioninit();
}抽象類抽象類不能被實例化,否則將導(dǎo)致出錯抽象類定義的抽象方法在子類中必須被實現(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');}}課堂練習(xí)將Logger類改為抽象類將log()及createHandler()兩個方法寫為抽象類嘗試實例化Logger類,看看結(jié)果類的自動加載通過全局函數(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,有的通過類名解析出目錄結(jié)構(gòu))PHP5.1后引入spl_autoload機制,通過spl_autoload_register()注冊多個自動加載函數(shù)課堂練習(xí)寫一個autoload()函數(shù)用來自動加載Logger、DbLogger、FileLogger等類嘗試修改這幾個類的文件名,修改autoload()函數(shù),切實理解自動加載的機制命名空間在PHP中,類名必須全局唯一同時包含兩個同名的類將導(dǎo)致Fatal
Error在引入第三方類庫時難以避免類名沖突,故引入命名空間在類文件的頂部通過namespace關(guān)鍵字聲明命名空間命名空間通過聲明本腳本屬于指定命名空間來調(diào)用同命名空間內(nèi)的類通過use關(guān)鍵字來指定需要使用的類在實例化時使用完整路徑來指定需要使用的類遍歷對象可以使用foreach來遍歷對象,對象內(nèi)的所有可訪問屬性將被遍歷在類的內(nèi)部遍歷自身屬性,根據(jù)訪問權(quán)限進行遍歷魔術(shù)方法PHP中將以兩個下劃線__開頭的類方法保留,稱之為魔術(shù)方法常用的魔術(shù)方法有__set(),__get(),__call(),__toString()構(gòu)造函數(shù)和析構(gòu)函數(shù)也屬于魔術(shù)方法魔術(shù)方法編寫__toSt
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南省楚雄彝族自治州祿豐市2024-2025學(xué)年八年級下學(xué)期開學(xué)生物學(xué)試題(含答案)
- 農(nóng)業(yè)政策支持措施作業(yè)指導(dǎo)書
- 私人美容師服務(wù)合同
- 基于大數(shù)據(jù)的商業(yè)決策支持系統(tǒng)開發(fā)合同
- 電子支付結(jié)算合作協(xié)議
- 農(nóng)業(yè)自動化系統(tǒng)安裝維護合同
- 活動籌備報告
- 《現(xiàn)代酒店管理基礎(chǔ)》(第二版)課件 任務(wù)7 酒店服務(wù)質(zhì)量管理
- 企業(yè)員工健康管理與促進計劃指南
- 春蕾百合幼兒園入學(xué)條件
- 江蘇2024年江蘇省新聞出版學(xué)校招聘人員筆試歷年典型考題及考點附答案解析
- 大酒店風(fēng)險分級管控和隱患排查治理雙體系文件
- 美容衛(wèi)生管理制度打印版
- 2024CSCO非小細胞肺癌診療指南解讀
- HJ 1131-2020 固定污染源廢氣 二氧化硫的測定 便攜式紫外吸收法(正式版)
- (高清版)JTGT 3610-2019 公路路基施工技術(shù)規(guī)范
- 湖南省建設(shè)工程竣工驗收備案表
- 2022年江蘇省五年制專轉(zhuǎn)本考試英語真題(試卷+答案)
- 手術(shù)室穿脫手術(shù)衣小講課
- 2024年蕪湖職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案解析
- (正式版)SHT 3075-2024 石油化工鋼制壓力容器材料選用規(guī)范
評論
0/150
提交評論