PHP書寫規范
作者:sink
最後修改:2011-7-7
參考資料:
PHP Manual
http://www.php.net/manual/zh/language.oop5.basic.php
PEAR Coding Standards
http://pear.php.net/manual/en/standards.php
C++ Coding Standard
http://www.possibility.com/Cpp/CppCodingStandard.html
Google C++ Style Guide
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
Code Conventions for the Java
http://www.oracle.com/technetwork/java/codeconvtoc-136057.html
通用原則:
1、語義化
看到名字,就知道意思。
2、通用前綴
is表示是否、get表示讀、set表示寫。is後面優先跟形容詞,而不是名詞,比如是否多語言文字,應使用is_multilingual,而不是is_multilanguage。
3、單數與復數
參考js的函數命名規則:getElementById、getElementsByTagName、getElementsByName。
例如:
取我的多個好友的名字,應使用getFriendsName,而不是getFriendNames或者getFriendName
取一個用戶,是getUser
取多個用戶,是getUsers
4、冗余後綴
盡量不使用data、list、info後綴。
比如,js的命名就很注意,使用getElementsByTagName而不是getElementsInfoByTagName。
應該使用getFriends或者getFriendsUserId,而不是getFriendsList;應該使用getUser,而不使用getUserInfo或者getUserData。
不過有時候很難避免,比如有2個函數,分別是取用戶基本信息,和取用戶詳細信息。
取用戶基本信息:昵稱、頭像URI,函數名getUserBasic還是getUserBasicInfo?函數名以形容詞結尾感覺不合適,待討論。
取用戶詳細信息:昵稱、頭像URI、簽名、生日,函數名getUser沒問題。
5、含義模糊的類名、文件名、目錄名
每當使用common、util、functions、class、object、basic作為文件名時要慎重,由於這些詞太通用,發展下去裡面東西可 能越來越多,變成垃圾箱。要給這些起一個准確的名字,比如要做字符串處理的類,可以叫StringLib.php,放在lib目錄裡。
6、lib、plugin與addon的區別
有些類、函數算做lib、plugin還是addon。待討論。
類名:
大寫字母開頭,駝峰命名。一般使用名詞,比如配置解析類ConfigParser,而不是ParseConfig。
與Java、C++一致。
例如:class UserModel
類的文件名:
與類名相同。這與php autoload有關,為了autoload,類名總要很長,待討論。
與Java一致。
例如:class UserModel的文件名為UserModel.php
非類文件名:
全小寫,下劃線分隔,不得使用空格。比如get_user.php。
目錄名:
全小寫,下劃線分隔,不得使用空格。比如model、www。
函數名:
小寫字母開頭,駝峰命名,例如:function addBlog()。
與Java、C++一致。
函數表示功能,即動作,所以動詞優先,例如使用editBlog,而不用blogEdit。
PHP內置函數由於歷史原因,有多種風格,do_something,something_do,dosomething,比較新的函數用了doSomething,才與目前主流語言保持一致。
比如:paser_str、json_encode、substr、fetchAll。
歷史原因可能無法改變,但我們能保證新的代碼是嚴謹的,不要讓自己成為歷史原因。
類中的函數:
兩個函數中間空一行。如果有時間的話,各個函數按英文字母排序,免得太混亂。
例如:
- class BlogModel
- {
- public function addBlog()
- {
- }
- public function updateBlog()
- {
- }
- }
文件注釋:
注釋緊跟<?php下一行。注明作者。@version暫不需要寫,因為svn提供了版本管理。
格式按照PHPdoc的要求:
http://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_tags.author.pkg.html
- <?php
- /**
- * blog的各種業務:添加、更新
- * @author sink
- *
- */
- class BlogModel
- {
- }
- ?>
API注釋:
一定要寫輸入參數,和輸出格式。寫清楚正確時輸出什麼,錯誤時輸出什麼。
否則別人無法使用。
1