PHP語(yǔ)言規(guī)范文檔_第1頁(yè)
PHP語(yǔ)言規(guī)范文檔_第2頁(yè)
PHP語(yǔ)言規(guī)范文檔_第3頁(yè)
PHP語(yǔ)言規(guī)范文檔_第4頁(yè)
PHP語(yǔ)言規(guī)范文檔_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、PHP語(yǔ)言編寫(xiě)規(guī)范第1章 命名規(guī)范1.1變量1.1.1全局變量全局變量使用$g_開(kāi)頭,如$g_data_list。1.1.2 一般變量一般的變量使用小寫(xiě)字母命名,單詞之間使用下劃線分隔。變量名字應(yīng)該使用名詞或者形容詞+名詞的方式。如$value,$new_value。1.1.3 臨時(shí)變量不要將在循環(huán)中頻繁使用的臨時(shí)變量如$i,$j等用于其它用途。1.2 函數(shù)函數(shù)采用小寫(xiě)字母命名,單詞之間使用下劃線分隔。函數(shù)的命名建議使用動(dòng)詞+名詞的方式,如get_user_img。完成一組功能的函數(shù)放到一個(gè)文件中,存放函數(shù)的文件采用function_name.func.php命名。1.3 類類使用英文的大小寫(xiě)

2、來(lái)分隔單詞,包括首個(gè)單詞,所有單詞的首字母大寫(xiě),如PageManager;在類中,方法放到屬性定義前邊、公用方法放到專用方法前邊;一般情況下,一個(gè)類對(duì)應(yīng)到一個(gè)文件;當(dāng)一些類關(guān)系緊密時(shí),可以存放在一個(gè)文件中;存放類的文件采用ClassName.class.php方式命名。1.4 方法方法使用英文的大小寫(xiě)來(lái)分隔單詞,除首個(gè)單詞外,其他單詞的首字母大寫(xiě),如getCurrentPage();不要采用不常用的縮寫(xiě),如where2go();使用常用的縮寫(xiě)時(shí),只大寫(xiě)首字母,如getHtml()。第2章 版式規(guī)則2.1 語(yǔ)義分隔各個(gè)函數(shù)、方法之間應(yīng)該采用空行間隔;同一個(gè)函數(shù)中聯(lián)系緊密的語(yǔ)句之間可以不換行,其他

3、情況需要換行。2.2 空格規(guī)則2.2.1 邏輯運(yùn)算符前后必須加空格正確 $a = $b;錯(cuò)誤 $a=$b;$a =$b;備注 -正確 $a+; $a;錯(cuò)誤 $a +; $a ;備注 加一減一運(yùn)算符不能加空格。2.2.2 多個(gè)參數(shù)分隔時(shí)必須加空格正確 $g_pro , $g_user , g_show;get_db_info($host, $user, $passwd);錯(cuò)誤 $g_pro,$g_user,$g_show;get_db_info($host,$user,$passwd);備注 -2.2.3 語(yǔ)法關(guān)鍵字后必須加空格例如:If, for , while, switch .正確 for

4、 ($i = 0; $i 10; $i+)錯(cuò)誤 for($i = 0; $i 10; $i+ )備注 -2.3 字符串和變量連接規(guī)則字符串與變量連接使用.號(hào)時(shí),必須在.前后加空格,使用”號(hào)時(shí),必須在變量前后加”。正確 $my_name = file_ . $var1;$my_name = ”file_$var1”;錯(cuò)誤 $my_name = ”file_.$var1;$my_name = ”file_$var1;備注 -2.4 圓括號(hào)規(guī)則函數(shù)名后括號(hào)不需要加空格、語(yǔ)法關(guān)鍵字后的括號(hào)必須加空格。正確 for ($i = 0; $i 10; $i+)strlen($my_name);錯(cuò)誤 for(

5、$i = 0; $i 10; $i+ )strlen ($my_name);備注 -2.5 花括號(hào)規(guī)則花括號(hào)必須為上下對(duì)應(yīng)。正確 if ($a)$b = $a;錯(cuò)誤 if ($a)$b = $a;備注 -2.6 數(shù)組定義規(guī)則數(shù)組定義和使用時(shí)中key值前后必須加單引號(hào)。PHP 代碼:下載: php_array.php , gender = php ); /錯(cuò)誤 array( name = , gender = php ); ?2.7 SQL規(guī)則在PHP中嵌入的SQL語(yǔ)句關(guān)鍵字全部采用大寫(xiě);表名和字段名要用反引號(hào)()引起來(lái)以防止因?yàn)樽侄蚊邪崭穸霈F(xiàn)錯(cuò)誤;數(shù)據(jù)值兩邊用單

6、引號(hào)”包括,并且應(yīng)確保數(shù)據(jù)值中的單引號(hào)已經(jīng)轉(zhuǎn)義以防止SQL注入。正確 $sql = ”SELECT FROM user WHERE id = $id LIMIT 1;錯(cuò)誤 $sql = ”select name.user from name where id = $id ”;備注 -第3章 注釋規(guī)則3.1 一般規(guī)則不寫(xiě)不必要的注釋;只有當(dāng)代碼不能很好地說(shuō)明邏輯時(shí),才用注釋補(bǔ)充;把注釋看成程序的一部分,在編寫(xiě)/維護(hù)代碼時(shí)同時(shí)編寫(xiě)/維護(hù)注釋;注釋完全采用PHPDocumentor的規(guī)范,以方便用其生成API級(jí)文檔。3.2 詳細(xì)規(guī)則請(qǐng)參見(jiàn)PHPDocumentor手冊(cè)。下邊給出各

7、個(gè)部分的注釋示范。3.2.1 版權(quán)信息注釋名稱 版權(quán)信息注釋示范 / +-+/ | phpDocumentor |/ +-+/ | Copyright (c) 2000-2003 Joshua Eichorn |/ | Email |/ | Web |/ +-+/ | This source file is subject to PHP License |/ +-+/備注 使用/來(lái)標(biāo)示版權(quán)信息,以免和PHPDocumentor的page-level DocBlock發(fā)生沖突3.2.2文件頭注釋示例 注釋名稱 文件頭

8、注釋注釋示范 下載: php_doc.php 備注1 文件頭注釋需要指明所屬的包和子包2 在version中加上$ID,以方便使用CVS管理文件3.2.3 類注釋示例注釋名稱 類注釋注釋示范 下載: php_class.php ?php /* * Use this element to represent an inline tag like link * see parserStringWithInlineTags * package phpDocumentor * subpackage InlineTags * author Greg Beaver * since 1.0rc1 * ver

9、sion $Revision: $ * tutorial inlinetags.pkg */ ?備注 -3.2.4 類屬性注釋示例注釋名稱 類屬性注釋注釋示范 下載: php.php ?php /* var $type = inlinetag; * Element type * * Type is used by many functions to skip the hassle of * * * if get_class($blah) = parserBlah * * always inlinetag * var string */ ?備注 -3.2.5 函數(shù)/類方法注釋示

10、例注釋名稱 函數(shù)/類方法注釋注釋示范 下載: php.php 此條目發(fā)表在 理論 分類目錄。將固定鏈接加入收藏夾。 用單引號(hào)代替雙引號(hào)來(lái)包含字符串,這樣做會(huì)更快一些。因?yàn)镻HP會(huì)在雙引號(hào)包圍的字符串中搜尋變量,單引號(hào)則不會(huì),注意:只有echo能這么做,它是一種可以把多個(gè)字符串當(dāng)作參數(shù)的“函數(shù)”(譯注:PHP手冊(cè)中說(shuō)echo是語(yǔ)言結(jié)構(gòu),不是真正的函數(shù),故把函數(shù)加上了雙引號(hào))。1、如果能將類的方法定義成static,就盡量定義成static,它的速度會(huì)提升將近4倍。2、$rowid 的速度是$rowid的7倍。3、echo 比 print 快,并且使用echo的多重參數(shù)(譯注:指用逗號(hào)而不是句點(diǎn))

11、代替字符串連接,比如echo $str1,$str2。4、在執(zhí)行for循環(huán)之前確定最大循環(huán)數(shù),不要每循環(huán)一次都計(jì)算最大值,最好運(yùn)用foreach代替。5、注銷那些不用的變量尤其是大數(shù)組,以便釋放內(nèi)存。6、盡量避免使用_get,_set,_autoload。7、require_once()代價(jià)昂貴。8、include文件時(shí)盡量使用絕對(duì)路徑,因?yàn)樗苊饬薖HP去include_path里查找文件的速度,解析操作系統(tǒng)路徑所需的時(shí)間會(huì)更少。9、如果你想知道腳本開(kāi)始執(zhí)行(譯注:即服務(wù)器端收到客戶端請(qǐng)求)的時(shí)刻,使用$_SERVERREQUEST_TIME要好于time()。10、函數(shù)代替正則表達(dá)式完成相

12、同功能。11、str_replace函數(shù)比preg_replace函數(shù)快,但strtr函數(shù)的效率是str_replace函數(shù)的四倍。12、如果一個(gè)字符串替換函數(shù),可接受數(shù)組或字符作為參數(shù),并且參數(shù)長(zhǎng)度不太長(zhǎng),那么可以考慮額外寫(xiě)一段替換代碼,使得每次傳遞參數(shù)是一個(gè)字符,而不是只寫(xiě)一行代碼接受數(shù)組作為查詢和替換的參數(shù)。13、使用選擇分支語(yǔ)句(譯注:即switch case)好于使用多個(gè)if,else if語(yǔ)句。14、用屏蔽錯(cuò)誤消息的做法非常低效,極其低效。15、打開(kāi)apache的mod_deflate模塊,可以提高網(wǎng)頁(yè)的瀏覽速度。16、數(shù)據(jù)庫(kù)連接當(dāng)使用完畢時(shí)應(yīng)關(guān)掉,不要用長(zhǎng)連接。17、錯(cuò)誤消息代價(jià)

13、昂貴。18、在方法中遞增局部變量,速度是最快的。幾乎與在函數(shù)中調(diào)用局部變量的速度相當(dāng)。19、遞增一個(gè)全局變量要比遞增一個(gè)局部變量慢2倍。20、遞增一個(gè)對(duì)象屬性(如:$this-prop+)要比遞增一個(gè)局部變量慢3倍。21、遞增一個(gè)未預(yù)定義的局部變量要比遞增一個(gè)預(yù)定義的局部變量慢9至10倍。22、僅定義一個(gè)局部變量而沒(méi)在函數(shù)中調(diào)用它,同樣會(huì)減慢速度(其程度相當(dāng)于遞增一個(gè)局部變量)。PHP大概會(huì)檢查看是否存在全局變量。23、方法調(diào)用看來(lái)與類中定義的方法的數(shù)量無(wú)關(guān),因?yàn)槲遥ㄔ跍y(cè)試方法之前和之后都)添加了10個(gè)方法,但性能上沒(méi)有變化。24、派生類中的方法運(yùn)行起來(lái)要快于在基類中定義的同樣的方法。25、調(diào)

14、用帶有一個(gè)參數(shù)的空函數(shù),其花費(fèi)的時(shí)間相當(dāng)于執(zhí)行7至8次的局部變量遞增操作。類似的方法調(diào)用所花費(fèi)的時(shí)間接近于15次的局部變量遞增操作。26、Apache解析一個(gè)PHP腳本的時(shí)間要比解析一個(gè)靜態(tài)HTML頁(yè)面慢2至10倍。盡量多用靜態(tài)HTML頁(yè)面,少用腳本。27、除非腳本可以緩存,否則每次調(diào)用時(shí)都會(huì)重新編譯一次。引入一套PHP緩存機(jī)制通??梢蕴嵘?5%至100%的性能,以免除編譯開(kāi)銷。28、盡量做緩存,可使用memcached。memcached是一款高性能的內(nèi)存對(duì)象緩存系統(tǒng),可用來(lái)加速動(dòng)態(tài)Web應(yīng)用程序,減輕數(shù)據(jù)庫(kù)負(fù)載。對(duì)運(yùn)算碼 (OP code)的緩存很有用,使得腳本不必為每個(gè)請(qǐng)求做重新編譯。2

15、9、當(dāng)操作字符串并需要檢驗(yàn)其長(zhǎng)度是否滿足某種要求時(shí),你想當(dāng)然地會(huì)使用strlen()函數(shù)。此函數(shù)執(zhí)行起來(lái)相當(dāng)快,因?yàn)樗蛔鋈魏斡?jì)算,只返回在zval 結(jié)構(gòu)(C的內(nèi)置數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)PHP變量)中存儲(chǔ)的已知字符串長(zhǎng)度。但是,由于strlen()是函數(shù),多多少少會(huì)有些慢,因?yàn)楹瘮?shù)調(diào)用會(huì)經(jīng)過(guò)諸多步驟,如字母小寫(xiě)化(譯注:指函數(shù)名小寫(xiě)化,PHP不區(qū)分函數(shù)名大小寫(xiě))、哈希查找,會(huì)跟隨被調(diào)用的函數(shù)一起執(zhí)行。在某些情況下,你可以使用isset() 技巧加速執(zhí)行你的代碼。(舉例如下)if (strlen($foo) 5) echo “Foo is too short”$ (與下面的技巧做比較)if (!is

16、set($foo5) echo “Foo is too short”$ 調(diào)用isset()恰巧比strlen()快,因?yàn)榕c后者不同的是,isset()作為一種語(yǔ)言結(jié)構(gòu),意味著它的執(zhí)行不需要函數(shù)查找和字母小寫(xiě)化。也就是說(shuō),實(shí)際上在檢驗(yàn)字符串長(zhǎng)度的頂層代碼中你沒(méi)有花太多開(kāi)銷。34、當(dāng)執(zhí)行變量$i的遞增或遞減時(shí),$i+會(huì)比+$i慢一些。這種差異是PHP特有的,并不適用于其他語(yǔ)言,所以請(qǐng)不要修改你的C或Java代碼并指望它們能立即變快,沒(méi)用的。+$i更快是因?yàn)樗恍枰?條指令(opcodes),$i+則需要4條指令。后置遞增實(shí)際上會(huì)產(chǎn)生一個(gè)臨時(shí)變量,這個(gè)臨時(shí)變量隨后被遞增。而前置遞增直接在原值上遞增。

17、這是最優(yōu)化處理的一種,正如Zend的PHP優(yōu)化器所作的那樣。牢記這個(gè)優(yōu)化處理不失為一個(gè)好主意,因?yàn)椴⒉皇撬械闹噶顑?yōu)化器都會(huì)做同樣的優(yōu)化處理,并且存在大量沒(méi)有裝配指令優(yōu)化器的互聯(lián)網(wǎng)服務(wù)提供商(ISPs)和服務(wù)器。35、并不是事必面向?qū)ο?OOP),面向?qū)ο笸_(kāi)銷很大,每個(gè)方法和對(duì)象調(diào)用都會(huì)消耗很多內(nèi)存。36、并非要用類實(shí)現(xiàn)所有的數(shù)據(jù)結(jié)構(gòu),數(shù)組也很有用。37、不要把方法細(xì)分得過(guò)多,仔細(xì)想想你真正打算重用的是哪些代碼?38、當(dāng)你需要時(shí),你總能把代碼分解成方法。39、盡量采用大量的PHP內(nèi)置函數(shù)。40、如果在代碼中存在大量耗時(shí)的函數(shù),你可以考慮用C擴(kuò)展的方式實(shí)現(xiàn)它們。41、評(píng)估檢驗(yàn)(profile

18、)你的代碼。檢驗(yàn)器會(huì)告訴你,代碼的哪些部分消耗了多少時(shí)間。Xdebug調(diào)試器包含了檢驗(yàn)程序,評(píng)估檢驗(yàn)總體上可以顯示出代碼的瓶頸。42、mod_zip可作為Apache模塊,用來(lái)即時(shí)壓縮你的數(shù)據(jù),并可讓數(shù)據(jù)傳輸量降低80%。43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情況下,盡量用file_get_contents,因?yàn)樗男矢叩枚啵〉且⒁鈌ile_get_contents在打開(kāi)一個(gè)URL文件時(shí)候的PHP版本問(wèn)題;44、盡量的少進(jìn)行文件操作,雖然PHP的文件操作效率也不低的;45、優(yōu)化Select SQL語(yǔ)句,在可能的情況下盡量少的進(jìn)行Insert、Update操作(在update上

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論