小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

直面40個菜鳥跡象——40個跡象表明你還是PHP菜鳥

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多