版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PHP面向?qū)ο笈c設(shè)計模式StartGame模仿cs,設(shè)計gungame的槍面向過程的代碼echo“akfire”;echo“upsfire”;echo“amanisdead”;問題代碼無法重用代碼屬于堆砌狀態(tài),簡單來說,就是一堆shit根本無維護(hù)性可言,你的代碼接手人會總是詛咒你,假設(shè)最近運氣很背,回想一下自己干過的壞事.面向結(jié)構(gòu)化的代碼functionupsFire(){ echo“upsFire!”;}functionakFire(){echo'AkFire!';}functionkillMan($gun){if($gun==‘ups’){upsFire();}elseif($gun==‘a(chǎn)k’){akFire();}echo“amanisdead”;}好處代碼可重用方便調(diào)用結(jié)構(gòu)清晰竟然可以占盡好處?看來已經(jīng)到達(dá)神的領(lǐng)域了…小問題因為文件作為結(jié)構(gòu)化編程的一個集合單元,那么,文件數(shù)量很多.例如:gun.php,player.php,role.php,player_role.php,gun_role.php你會在代碼迷宮中成為路癡(參加路癡協(xié)會吧)解決方案:目錄作為更大的一個集合(層次比OO多一層)引用新概念:代碼維護(hù)維護(hù)期對原來代碼進(jìn)行修改,產(chǎn)生大問題大問題描述一:原來執(zhí)行代碼調(diào)用killMan(‘ups’);假設(shè)要加上一個M4槍調(diào)用呢?大問題描述二:參加M4槍描述:要修改killMan函數(shù)引發(fā)問題:破壞原有代碼不可破壞原有代碼的原因:原有代碼經(jīng)過屢次修改和打補丁,已經(jīng)處于穩(wěn)定狀態(tài),新代碼的修改會破壞原有代碼,存在新的bug隱患.總結(jié):代碼越改越爛,然后軟件就告訴你:tobeornotbe,Thatisaquestion!..==||看不懂?好了,中文版:生存還是死亡,這是一個問題!還看不懂?好了,簡單版:軟件告訴你,他掛了!面向?qū)ο?考慮維護(hù)期的設(shè)計方式classGun{publicfunctionkillMan(Guns$gun){ $gun->fire(); echo“amanisdead”;}}classm4GunextendsGun{publicfunctionfire(){ echo“m4isfire“;}}調(diào)用方式:$gun=newGun();$gun->killMan(newm4Gun);維護(hù)期:新功能你的游戲有很多人玩,所以游戲升級了,M4和AK有了導(dǎo)向飛機轟炸功能,UPS那么沒有.并且,我們有導(dǎo)航飛機轟炸功能的槍,有一百種.兩個字:牛B..代碼修改:修改父類classGun{publicfunctionkillMan(Guns$gun){ $gun->fire(); echo“amanisdead”;}Publicfunctionnav(){ echo“bomberisbombing!”;}}大問題:UpsGun類不帶有飛機導(dǎo)航系統(tǒng),也有了這個功能….郁悶!解決方式:覆蓋classupsGunextendsGun{publicfunctionfire(){ echo“m4isfire“;}publicfunctionnav(){//donothing;}}你的新發(fā)現(xiàn)不帶飛機導(dǎo)航的類有一萬種..吐血身亡…你還需要導(dǎo)彈導(dǎo)航….嚇的活過來,然后再吐血身亡…你最重要的發(fā)現(xiàn)是…你的代碼已經(jīng)死掉了….重要提示:大俠,請再戰(zhàn)江湖!救世主來了..他的名字不叫耶穌..他是OO界無人不知,無人不曉的設(shè)計模式哲學(xué)王設(shè)計模式教條陰陽論陰陽論設(shè)計模式如此說:在OO領(lǐng)域,陰陽即是變化與不變的巧妙理解…小路曰:也就是什么….設(shè)計模式曰:也就是說,變化的局部交給聰明的人處理,比方我..不變的簡單局部交給笨蛋處理,比方你….小路曰:還是不懂….設(shè)計模式曰:暈,我看來還是高估你的智力…簡單來說..需要變化的復(fù)雜的東西交給我就是了小路:我們配合寫出新代碼吧設(shè)計模式曰:你丫的真懶,好吧,我?guī)湍銓懓?小路寫的代碼(不變)classattack{publicfunctionkillMan(){ echo“amanisdead”;}Publicfunctionkill(Attacks$a){ $a->attack();}}設(shè)計模式寫的新代碼(變化)interfaceAttacks{ publicfunctionattack();}//轟炸機導(dǎo)航classbomberimplementsAttacks{publicfunctionattack(){ echo“bomberisnavigating”;}}//導(dǎo)彈轟炸導(dǎo)航classmissileimplementsAttacks{publicfunctionattack(){echo“missileisnavigating”;}}設(shè)計模式寫的新代碼(變化)二ClassupsimplementsAttacks{publicfunctionattack(){echo“upsisfire”;}}classakimplementsAttacks{Publicfunctionattack(){echo“akisfire”;}}代碼調(diào)用$upsGun=newGun();$upsGun->kill(newups());$upsGun->killMan();$akGun=newGun();$akGun->kill(newAk());$akGun->kill(newbomber());$akGun->killMan();陰陽論后續(xù)設(shè)計模式曰:接口,組合的使用,一切的一切都為了把變化的局部別離出來,專門進(jìn)行處理..小路曰:這樣就好了嗎?設(shè)計模式曰:當(dāng)然可以進(jìn)行更好的改進(jìn),但是你太笨..目前就教一個簡單的,但是夠用了..小路曰:看來設(shè)計模式之路還很漫長啊..以后我都膜拜你好嗎?請賜予我學(xué)會OO的能力!設(shè)計模式曰:你信我!我就把宇宙中最偉大奧秘告之與你!最后的奧義面向接口:好處一:可實現(xiàn)多繼承功能好處二:劃分出變化的局部重用代替繼承兩者都滿足的更好方案:mixinPHP實現(xiàn)mixin有點復(fù)雜…自己去研究吧..==||小tips:類型提示設(shè)計模式大局部以JAVA為描述語言..在轉(zhuǎn)換過程中請注意PHP的類型提示功能例如:publicfunctionkillMan(Guns$gun){ $gun->fire(); echo“amanisdead”;}這里的(Guns$gun)就是類型提示.需要的原因:便于把JAVA的多態(tài)的用法轉(zhuǎn)換PHP之中..因為PHP是弱類型語言,根本沒有upcasting概念.麻煩的是設(shè)計模式中大量使用upcasting…郁悶…參考資料:C++精髓Headfrist設(shè)計模式其他…看過的技術(shù)爛書就不推薦了..==||PPT參考Headfrist設(shè)計模式一個網(wǎng)友的PPT…圣經(jīng)…哈姆雷特…易經(jīng)…動漫…游戲…網(wǎng)絡(luò)..==||別疑心后面四個..是真的…說真話不容易啊…老是認(rèn)為是假的…==||還有什么問題嗎?別問太多..我懂的不多…實話…….看吧,你丫就是不相信…..PHP根底知識根底的重要性根底不代表簡單數(shù)組對象引用數(shù)組數(shù)組就是hashtable,HashTable*ht表示數(shù)組默認(rèn)的排序算法是快速排序.數(shù)組對象對象對象Zend_object_handler通過zend_object_store_get_object函數(shù)獲取zend_object.對象Zend_object通過下面的函數(shù)獲得zend_class_entryZend_class_entry是類的真正結(jié)構(gòu)對象Zend_class_entry太長,就不粘貼了,這個結(jié)構(gòu)包括很多重要信息類的名稱,序列化,反序列化.函數(shù),常量,屬性,靜態(tài)的屬性等(都保存在hashtable)各種魔法函數(shù)的定義父類,接口等等…引用引用CopyonWriteChangonwrite這里的引用并不進(jìn)行別離,類似”引用”第一個例子,只對引用計數(shù)加1.別離引用讓PHP的內(nèi)存管理變得復(fù)雜思考一下,下面的代碼,變量會如何別離?$a=‘test’;$b
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024項目融資合同協(xié)議書
- 2025年度中醫(yī)食療研究與推廣合同4篇
- 2025年度特色餐飲連鎖品牌授權(quán)合同3篇
- 2025年度生態(tài)修復(fù)工程承包商借款合同范本4篇
- 2025年度數(shù)據(jù)中心運維外包合同4篇
- 2025年度體育用品代理服務(wù)合同模板4篇
- 2025年度物流車輛環(huán)保排放檢測合同4篇
- 2025年度人工智能技術(shù)應(yīng)用與開發(fā)合同2篇
- 2024版全新銷售擔(dān)保合同范本下載
- 2025年度新能源汽車充電站車位銷售與管理協(xié)議4篇
- 專升本英語閱讀理解50篇
- 施工單位值班人員安全交底和要求
- 中國保險用戶需求趨勢洞察報告
- 數(shù)字化轉(zhuǎn)型指南 星展銀行如何成為“全球最佳銀行”
- 中餐烹飪技法大全
- 靈芝孢子油減毒作用課件
- 現(xiàn)場工藝紀(jì)律檢查表
- 醫(yī)院品管圈與護(hù)理質(zhì)量持續(xù)改進(jìn)PDCA案例降低ICU病人失禁性皮炎發(fā)生率
- 新型電力系統(tǒng)研究
- 烘干廠股東合作協(xié)議書
- 法院服務(wù)外包投標(biāo)方案(技術(shù)標(biāo))
評論
0/150
提交評論