av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

40個(gè)跡象表明你還是PHP菜鳥(niǎo)

瀏覽:3日期:2024-02-17 11:05:11
這些跡象不只是用來(lái)告訴我是菜鳥(niǎo),還告訴我還有很多要學(xué)習(xí)的。簡(jiǎn)介40個(gè)跡象的英文版權(quán)歸Reinhold Weber所有,中譯文作者yangyang(aka davidkoree)。雙語(yǔ)版可用于非商業(yè)傳播,但須注明英文版作者、版權(quán)信息,以及中譯文作者。翻譯水平有限,請(qǐng)廣大PHPer指正。40個(gè)Conquer的作者是《PHPer》李俊鵬,可用于非商業(yè)傳播。正文我愿意把本文歸入我的“編程糗事”系列。盡管在正規(guī)大學(xué)課程中,接觸到軟件工程、企業(yè)級(jí)軟件架構(gòu)和數(shù)據(jù)庫(kù)設(shè)計(jì),但我還是時(shí)不時(shí)地體會(huì)到下述事實(shí)帶給我的“罪惡”感,當(dāng)然,都是我的主觀感受,并且面向Eclipse。你是PHP菜鳥(niǎo),如果你:1. 不會(huì)利用如phpDoc這樣的工具來(lái)恰當(dāng)?shù)刈⑨屇愕拇aConquer 1phpDoc是PEAR下的一個(gè)優(yōu)秀模塊,如同javadoc一樣為代碼生成API文檔。phpDoc采用OOP的思想編寫(xiě),它掃描指定目錄下的PHP源碼,識(shí)別出注釋中的專(zhuān)用標(biāo)記然后生成XML文件(或其它),然后建立相應(yīng)的索引。即本質(zhì)是從源碼中的注釋生成文檔。2. 對(duì)優(yōu)秀的集成開(kāi)發(fā)環(huán)境如Zend Studio或Eclipse PDT視而不見(jiàn)Conquer 2我不知道該怎么描述Zend,只是夜色里有人曾這么說(shuō)過(guò):PHP界的Zend如同軟件界的微軟;而Eclipse則是另一款多功能的開(kāi)發(fā)環(huán)境,想來(lái)大多數(shù)人都是用它來(lái)寫(xiě)Java的(比如我),而PDT即PHP Development Tools則是可以使用戶可以在Eclipse寫(xiě)PHP的插件。BTW,如果有興趣,你也可以自己為Eclipse開(kāi)發(fā)個(gè)插件。^_^3. 從未用過(guò)任何形式的版本控制系統(tǒng),如SubclipseConquer 3版本控制系統(tǒng)?還是先了解一下版本控制吧:版本控制就是數(shù)據(jù)倉(cāng)庫(kù),它可以記錄你對(duì)文件的每次更改。這樣自然也就了解了什么是版本控制系統(tǒng)了。而進(jìn)一步的了解不是三兩句可以結(jié)束的,所以直接推薦,自己選擇一個(gè)吧!(1)http://www.phpchina.com/bbs/thread-46209-1-1.html(2)http://bbs.phpchina.com/thread-47473-1-1.html(3)http://bbs.phpchina.com/thread-89264-1-1.html4. 不采用某種編碼與命名標(biāo)準(zhǔn),以及通用約定,不能在項(xiàng)目開(kāi)發(fā)周期里貫徹落實(shí)Conquer 4我覺(jué)得良好的代碼書(shū)寫(xiě)習(xí)慣令人很舒服,縮進(jìn)實(shí)在是必需的——要不看著那一堆密密麻麻毫無(wú)美感的代碼,實(shí)在令人郁悶。縮進(jìn)一般是4個(gè)空格,PEAR標(biāo)準(zhǔn)中不建議使用TAB鍵(在這里我小小汗顏一下),因?yàn)橛行﹫?chǎng)合會(huì)出現(xiàn)問(wèn)題(雖然我還沒(méi)遇到)。而命名建議變量:第一個(gè)單詞小寫(xiě)開(kāi)頭,其它大寫(xiě)開(kāi)頭如:myName,而類(lèi)名建議都大寫(xiě)開(kāi)頭如:MyName或者M(jìn)y_Name,至于用不用下劃線我覺(jué)得差別不大(如果很大請(qǐng)指教)。5. 不使用統(tǒng)一開(kāi)發(fā)方式Conquer 5由于還是個(gè)人PHP愛(ài)好者,所以對(duì)于團(tuán)隊(duì)共同開(kāi)發(fā)還是經(jīng)驗(yàn)匱乏的,在此,對(duì)于開(kāi)發(fā)方式這個(gè)詞有種好像理解又不理解的錯(cuò)覺(jué),而且利用搜索引擎好久也很難找到一篇比較滿意的文章,所以直接推薦:(1)http://www.phpchina.com/html/42/1142-7314.html(2)http://topic.csdn.net/u/20080509/09/9b81d740-68fc-4d63-9299-ce6675f240cb.html(3)http://www.ibm.com/developerworks/cn/web/wa-jacquard/index.html#N10064其實(shí),個(gè)人覺(jué)得開(kāi)發(fā)方式這個(gè)詞挺泛、挺抽象……6. 不轉(zhuǎn)換(或)也不驗(yàn)證某些輸入或SQL查詢串(譯注:參考PHP相關(guān)函數(shù))Conquer 6始終堅(jiān)信一點(diǎn):絕不相信未經(jīng)處理的用戶輸入。而過(guò)濾用戶輸入是Web安全的基礎(chǔ)。所以設(shè)計(jì)者始終應(yīng)該清楚地知道數(shù)據(jù)的來(lái)源、過(guò)濾數(shù)據(jù)、將已經(jīng)處理過(guò)的數(shù)據(jù)和未處理的數(shù)據(jù)區(qū)分開(kāi)。7. 不在編碼之前徹底規(guī)劃你的程序Conquer 7我個(gè)人覺(jué)得這點(diǎn)和寫(xiě)程序前畫(huà)流程圖之類(lèi)或者做項(xiàng)目的開(kāi)發(fā)流程一樣,應(yīng)該不需要過(guò)多解釋。8. 不使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)Conquer 8測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(Test Driven Development,英文縮寫(xiě)TDD)是極限編程的一個(gè)重要組成部分,它的基本思想就是在開(kāi)發(fā)功能代碼之前,先編寫(xiě)測(cè)試代碼。也就是說(shuō)在明確要開(kāi)發(fā)某個(gè)功能后,首先思考如何對(duì)這個(gè)功能進(jìn)行測(cè)試,并完成測(cè)試代碼的編寫(xiě),然后編寫(xiě)相關(guān)的代碼滿足這些測(cè)試用例。然后循環(huán)進(jìn)行添加其他功能,直到完成全部功能的開(kāi)發(fā)。代碼整潔可用(clean code that works)是測(cè)試驅(qū)動(dòng)開(kāi)發(fā)所追求的目標(biāo)。(摘自百度百科)9. 不在錯(cuò)誤開(kāi)啟狀態(tài)下進(jìn)行編碼和測(cè)試(譯注:參考PHP函數(shù)error_reporting)Conquer 9我想一般寫(xiě)代碼的時(shí)候都會(huì)開(kāi)啟錯(cuò)誤報(bào)告吧。這里順便了解下error_reporting原型為int error_reporting([ int $level]),該函數(shù)的作用是設(shè)置要顯示報(bào)告的錯(cuò)誤等級(jí),詳情參閱:http://cn2.php.net/manual/en/function.error-reporting.php10. 對(duì)調(diào)試器的好處視而不見(jiàn)Conquer 10推薦幾款調(diào)試器:(1)Zend IDE(2)APD(3)Xdebug11. 不重構(gòu)你的代碼Conquer 11重構(gòu)是指使用一系列重構(gòu)準(zhǔn)則(手法),在不改變“軟件之可察行為”前提下,調(diào)整其結(jié)構(gòu),是對(duì)軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整。目的是在不改變“軟件之可察行為”前提下,提高其可理解性,降低其修改成本。重構(gòu)的好處能改進(jìn)軟件設(shè)計(jì)使軟件更容易被理解,幫助設(shè)計(jì)者找到BUG,并且提高軟件的開(kāi)發(fā)速度。簡(jiǎn)而言之,重構(gòu)就是改進(jìn)已經(jīng)寫(xiě)好的軟件的設(shè)計(jì)。12. 不使用類(lèi)似MVC模式把程序的不同層次劃分開(kāi)Conquer 12MVC(Model View Controller)即模型—視圖—控制器,視圖是呈現(xiàn)給用戶的一面,模型則是處理任務(wù)的模塊,而控制器則是控制視圖和模型間的映射,即在用戶響應(yīng)下選擇何種模型進(jìn)行處理,而任務(wù)處理后控制以何種視圖呈現(xiàn)。13. 不知道這些概念:KISS、DRY、MVC、OOP、RESTConquer 13(1)KISS是指Keep It Simple,Stupid(摘自wikipedia),指設(shè)計(jì)時(shí)要堅(jiān)持簡(jiǎn)約原則,避免不必要的復(fù)雜化。(2)DRY是指Don't Repeat Yourself(摘自wikipedia),特指在程序設(shè)計(jì)以及計(jì)算中避免重復(fù)代碼,因?yàn)檫@樣會(huì)降低靈活性、簡(jiǎn)潔性,并且可能導(dǎo)致代碼之間的矛盾。(3)OOP即Object-Oriented Programming,是指面向?qū)ο蟮某绦蛟O(shè)計(jì)。我一直覺(jué)得經(jīng)典的比喻是汽車(chē)是一個(gè)類(lèi)(Class),而這個(gè)類(lèi)的屬性有輪子、車(chē)身、馬達(dá)等,方法有加速、減速等;而勞斯萊斯就是一個(gè)對(duì)象(Object)了,這個(gè)對(duì)象繼承了汽車(chē)這個(gè)類(lèi)的屬性和方法;而如何實(shí)現(xiàn)加速、減速?這樣的信息被隱藏了——即信息封裝(封裝),只留下用戶接口給我們了,比如踩剎車(chē)、踩油門(mén);至于多態(tài)嘛,我粗糙比喻下就是一臺(tái)自動(dòng)販賣(mài)機(jī)(我們假設(shè)它每種價(jià)格只有一款飲料),同樣是投幣這種方法,但是你投進(jìn)去2元跟5元得到的結(jié)果是不一樣的——當(dāng)然,除非這販賣(mài)機(jī)有問(wèn)題。(4)REST(Representational State Transfer)是一種針對(duì)網(wǎng)絡(luò)應(yīng)用的設(shè)計(jì)和開(kāi)發(fā)方式,可以降低開(kāi)發(fā)的復(fù)雜性,提高系統(tǒng)的可伸縮性。REST提出了一些設(shè)計(jì)概念和準(zhǔn)則:a. 網(wǎng)絡(luò)上的所有事物都被抽象為資源(resource);b. 每個(gè)資源對(duì)應(yīng)一個(gè)唯一的資源標(biāo)識(shí)(resource identifier);c. 通過(guò)通用的連接器接口(generic connector interface)對(duì)資源進(jìn)行操作;d. 對(duì)資源的各種操作不會(huì)改變資源標(biāo)識(shí);e. 所有的操作都是無(wú)狀態(tài)(stateless)。(摘自百度百科)14. 不用return而是直接在你的函數(shù)或類(lèi)中輸出(echo/print)內(nèi)容Conquer 14這一點(diǎn),觀摩大蝦的源代碼都是用return的,所以我一般也這么學(xué)習(xí)使用這,至于原因,我就是覺(jué)得這樣用感覺(jué)蠻好的。或許是嚴(yán)禁風(fēng)格吧。但是其實(shí)我對(duì)這句有點(diǎn)不理解,函數(shù)一般都是需要返回語(yǔ)句的嘛,除非是專(zhuān)門(mén)用來(lái)輸出的函數(shù)。15. 對(duì)單元測(cè)試或通用測(cè)試的優(yōu)點(diǎn)視而不見(jiàn)Conquer 15(1)單元測(cè)試是在軟件開(kāi)發(fā)過(guò)程中要進(jìn)行的最低級(jí)別的測(cè)試活動(dòng),在單元測(cè)試活動(dòng)中,軟件的獨(dú)立單元將在與程序的其他部分相隔離的情況下進(jìn)行測(cè)試,不僅能保證項(xiàng)目進(jìn)度還能優(yōu)化設(shè)計(jì)。我記得我以前在寫(xiě)比較長(zhǎng)的C代碼的時(shí)候都會(huì)在特定模塊結(jié)束時(shí)補(bǔ)一段測(cè)試代碼來(lái)檢驗(yàn),不知道算不算。^_^(2)通用測(cè)試技術(shù)?這讓我想起圖書(shū)館里圖靈系列圖書(shū)的一本《軟件測(cè)試****》,具體名字忘記了。這些都是屬于軟件測(cè)試的范疇,如果需要可以下載:http://bbs.phpchina.com/thread-94241-1-1.html16. 總是返回硬編碼的HTML,卻不返回純粹的數(shù)據(jù)、字符串或?qū)ο?7. 總是對(duì)“消息”和“配置參數(shù)”進(jìn)行硬編碼Conquer 16-17硬編碼的使用會(huì)造成程序的不靈活,以后修改的復(fù)雜問(wèn)題,還有可能會(huì)遇到編譯的問(wèn)題。更具體了解:http://bbs.bc-cn.net/thread-32143-1-6.html18. 不對(duì)SQL查詢語(yǔ)句做優(yōu)化Conquer 18SQL語(yǔ)句的優(yōu)化是將性能低下的SQL語(yǔ)句轉(zhuǎn)換成目的相同的性能優(yōu)異的SQL語(yǔ)句。這樣的好處是顯而易見(jiàn)的,可使用人工智能自動(dòng)SQL優(yōu)化。19. 不使用__autoload(譯注:參考PHP手冊(cè)相關(guān)描述)Conquer 19__autoload函數(shù)會(huì)在試圖使用尚未被定義的類(lèi)時(shí)自動(dòng)調(diào)用。通過(guò)調(diào)用此函數(shù),腳本引擎在 PHP出錯(cuò)失敗前有了最后一個(gè)機(jī)會(huì)加載所需的類(lèi)。詳見(jiàn):http://cn.php.net/__autoload20. 不允許智能錯(cuò)誤處理(譯注:參考PEAR的ErrorStack)Conquer 20PEAR_ErrorStack提供了一種基于堆棧的錯(cuò)誤處理方法,將各種錯(cuò)誤統(tǒng)一起來(lái)指向同一個(gè)地方以達(dá)到把多個(gè)無(wú)關(guān)項(xiàng)目連接到同一個(gè)應(yīng)用程序的目的。(譯自:http://pear.php.net/package/PEAR_ErrorStack)21. 使用$_GET替代$_POST來(lái)做具有破壞性的傳遞操作Conquer 21個(gè)人理解,使用$_GET會(huì)使一些信息暴露在URL中。22. 不知道怎么利用正則表達(dá)式Conquer 22正則表達(dá)式?我想可以去夜色找找shanji,或者到夜色共享手冊(cè)里下載一本學(xué)習(xí):http://bbs.phpchina.com/thread-89223-1-1.html23. 從未聽(tīng)說(shuō)過(guò)SQL注入或跨站腳本Conquer 23(1)所謂SQL注入,就是通過(guò)把SQL命令插入到Web表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令,比如先前的很多影視網(wǎng)站泄露VIP會(huì)員密碼大多就是通過(guò)Web表單遞交查詢字符暴出的,這類(lèi)表單特別容易受到SQL注入式攻擊;(2)業(yè)界對(duì)跨站攻擊的定義如下:“跨站攻擊是指入侵者在遠(yuǎn)程Web頁(yè)面的HTML代碼中插入具有惡意目的的數(shù)據(jù),用戶認(rèn)為該頁(yè)面是可信賴的,但是當(dāng)瀏覽器下載該頁(yè)面,嵌入其中的腳本將被解釋執(zhí)行。”由于HTML語(yǔ)言允許使用腳本進(jìn)行簡(jiǎn)單交互,入侵者便通過(guò)技術(shù)手段在某個(gè)頁(yè)面里插入一個(gè)惡意HTML代碼,例如記錄論壇保存的用戶信息(Cookie),由于Cookie保存了完整的用戶名和密碼資料,用戶就會(huì)遭受安全損失。如這句簡(jiǎn)單的Java腳本就能輕易獲取用戶信息:alert(document.cookie),它會(huì)彈出一個(gè)包含用戶信息的消息框。入侵者運(yùn)用腳本就能把用戶信息發(fā)送到他們自己的記錄頁(yè)面中,稍做分析便獲取了用戶的敏感信息。(摘自百度百科)24. 不允許簡(jiǎn)易配置,也不允許類(lèi)的構(gòu)造函數(shù)接受參數(shù)傳遞而后執(zhí)行set/get方法,或運(yùn)行時(shí)的常量定義Conquer 24就一句話:不要不允許類(lèi)的構(gòu)造函數(shù)接受參數(shù)傳遞。25. 不理解面向?qū)ο缶幊蹋∣OP)的優(yōu)勢(shì)和劣勢(shì)26. 不視情形大小而濫用OOP27. 自認(rèn)為實(shí)現(xiàn)可復(fù)用的軟件一定等于/需要讓你的代碼遵循OOPConquer 25-27.OOP的優(yōu)點(diǎn):使人們的編程與實(shí)際的世界更加接近,所有的對(duì)象被賦予屬性和方法,結(jié)果編程就更加富有人性化。OOP的缺點(diǎn):就C++而言,由于面向更高的邏輯抽象層,使得C++在實(shí)現(xiàn)的時(shí)候,不得不做出性能上面的犧牲,有時(shí)候甚至是致命的。28. 不利用智能缺省值Conquer 28我想,使用缺省值是個(gè)好習(xí)慣。29. 沒(méi)有單一的配置文件Conquer 29專(zhuān)門(mén)設(shè)置個(gè)config.php我想是需要的。30. 不想暴露文件源碼,卻用.inc后綴名取代了.phpConquer 30*.inc文件顧名思義是include file的意思,一般我們使用inc作為后綴,是因?yàn)檫@樣能體現(xiàn)該文件的作用。*.inc文件的作用有點(diǎn)類(lèi)似于C/C++內(nèi)的*.H、*.HPP頭文件,使用inc文件可以使我們的程序,增加可讀性,更易于開(kāi)發(fā)和維護(hù)。31. 不使用數(shù)據(jù)庫(kù)抽象層Conquer 31請(qǐng)參考http://bbs.phpchina.com/thread-94258-1-1.html32. 不能保持DRY作風(fēng),即不重復(fù)自己,如果你總是在復(fù)制粘貼一些東西,說(shuō)明你設(shè)計(jì)得很差勁Conquer 32請(qǐng)參考13點(diǎn)33. 沒(méi)有實(shí)現(xiàn)讓一個(gè)函數(shù)/類(lèi)/方法只做一件事,也不能組合利用它們Conquer 33這需要鍛煉,在實(shí)踐中學(xué)習(xí)、完善著。34. 沒(méi)能?chē)L試OOP的特長(zhǎng),如抽象類(lèi)、接口、多態(tài)、繼承,訪問(wèn)控制修飾符(譯注:如public、private、protected)Conquer 34哦,my god,我想還是參考25-27吧,也是需要在實(shí)踐中成長(zhǎng)的。35. 不用現(xiàn)有的設(shè)計(jì)模式優(yōu)化你的程序體系設(shè)計(jì)Conquer 35推薦《Head First》設(shè)計(jì)模式36. 不允許你的用戶在你擁有很多文件或目錄的情況下定義基礎(chǔ)目錄Conquer 36保留,這點(diǎn)我有點(diǎn)懵。^_^37. 污染了名稱(chēng)空間,比如用常見(jiàn)字符串命名你的庫(kù)函數(shù)Conquer 37哎,這實(shí)在是個(gè)不好的習(xí)慣,不過(guò)好習(xí)慣是養(yǎng)成的!38. 使用數(shù)據(jù)庫(kù)表時(shí)不使用表前綴Conquer 38我想,可能,PHPChina的數(shù)據(jù)表的前綴是PPC_或者PCC_。這的確是有好處的,我覺(jué)得,就好像字段名使用如txtUsername這樣的格式。39. 不使用統(tǒng)一的模板引擎Conquer 39這我都有點(diǎn)不知道該怎么說(shuō)了,一個(gè)團(tuán)隊(duì)一般都使用統(tǒng)一的模板引擎吧。40. 不關(guān)注已有的PHP開(kāi)發(fā)框架,懶于探索;其實(shí)先進(jìn)的開(kāi)發(fā)理念和美妙代碼就蘊(yùn)含其中。Conquer; 40比如Zend Framework、CakePHP、FleaPHP、ThinkPHP等。
標(biāo)簽: PHP
主站蜘蛛池模板: 国产香蕉视频在线播放 | 精品九九 | 亚洲一区二区免费视频 | av网站在线播放 | 新疆少妇videos高潮 | 国产精品福利在线观看 | 亚洲在线日韩 | 做a网站 | 久久免费精品 | 一级毛片视频 | 在线免费观看黄视频 | 欧美日韩在线免费观看 | 做a视频 | 在线观看免费国产 | 在线视频一区二区三区 | 欧美一区二区三区的 | 亚洲精品一区二区冲田杏梨 | 不卡的av在线 | a免费在线 | 麻豆一区一区三区四区 | 羞羞视频在线观免费观看 | 91久久精品日日躁夜夜躁欧美 | 91精品国产91久久久久久三级 | 日韩精品一区二区三区视频播放 | 日韩美女一区二区三区在线观看 | 欧美日韩一 | 天天综合网7799精品 | 一区二区三区小视频 | 国产精品久久久久久52avav | 成人av网站在线观看 | 天天精品在线 | 中文在线视频观看 | 在线免费观看成人 | 日韩第一区 | 黑人一级片视频 | 久久专区 | 人人艹人人 | 欧美色性| 成人夜晚看av | 亚洲免费福利视频 | 亚洲精品1 |