php編程命名規則
發表于:2007-07-01來源:作者:點擊數:
標簽:
命名是程序規劃的核心。古人相信只要知道一個人真正的名字就會獲得凌駕于那個人之上的不可思議的力 量。只要你給事物想到正確的名字,就會給你以及后來的人帶來比代碼更強的力量。別笑! 名字就是事物在它所處的生態環境中一個長久而深遠的結果??偟膩碚f,只
命名是程序規劃的核心。古人相信只要知道一個人真正的名字就會獲得凌駕于那個人之上的不可思議的力
量。只要你給事物想到正確的名字,就會給你以及后來的人帶來比代碼更強的力量。別笑!
名字就是事物在它所處的生態環境中一個長久而深遠的結果??偟膩碚f,只有了解系統的
程序員才能為系
統取出最合適的名字。如果所有的命名都與其自然相適合,則關系清晰,含義可以推導得出,一般人的推
想也能在意料之中。
如果你發覺你的命名只有少量能和其對應事物相匹配的話, 最好還是重新好好再看看你的設計吧。
類命名
在為類(class )命名前首先要知道它是什么。如果通過類名的提供的線索,你還是想不起這個類是
什么 的話,那么你的設計就還做的不夠好。
超過三個詞組成的混合名是容易造成系統各個實體間的混淆,再看看你的設計,嘗試使用(CRC Se-
ssion card)看看該命名所對應的實體是否有著那么多的功用。
對于派生類的命名應該避免帶其父類名的誘惑,一個類的名字只與它自身有關,和它的父類叫什么無
關。
有時后綴名是有用的,例如:如果你的系統使用了代理(agent ),那么就把某個部件命名為“下
載代理”(DownloadAgent)用以真正的傳送信息。
方法和函數命名
通常每個方法和函數都是執行一個動作的,所以對它們的命名應該清楚的說明它們是做什么的:用
CheckForErrors()代替ErrorCheck(),用DumpDataToFile()代替DataFile()。這么做也可以使功能和
數據成為更可區分的物體。
有時后綴名是有用的:
Max - 含義為某實體所能賦予的最大值。
Cnt - 一個運行中的計數變量的當前值。
Key - 鍵值。
例如:RetryMax 表示最多重試次數,RetryCnt 表示當前重試次數。
有時前綴名是有用的:
Is - 含義為問一個關于某樣事物的問題。無論何時,當人們看到Is就會知道這是一個問題。
Get - 含義為取得一個數值。
Set - 含義為設定一個數值
例如:IsHitRetryLimit。
縮寫詞不要全部使用大寫字母
無論如何,當遇到以下情況,你可以用首字母大寫其余字母小寫來代替全部使用大寫字母的方法來表
示縮寫詞。
使用: GetHtmlStatistic.
不使用: GetHTMLStatistic.
理由
當命名含有縮略詞時,人們似乎有著非常不同的直覺。統一規定是最好,這樣一來,命名的含義就完
全可以預知了。
舉個NetworkABCKey的例子,注意C是應該是ABC里面的C還是key里面的C,這個是很令人費解的。有些
人不在意這些,其他人卻很討厭這樣。所以你會在不同的代碼里看到不同的規則,使得你不知道怎么
去叫它。
例如
class FluidOz // 不要寫成 FluidOZ
class GetHtmlStatistic // 不要寫成 GetHTMLStatistic
--------------------------------------------------------------------------------
類命名
使用大寫字母作為詞的分隔,其他的字母均使用小寫
名字的首字母使用大寫
不要使用下劃線(@#_@#)
理由
根據很多的命名方式,大部分人認為這樣是最好的方式。
例如
class NameOneTwo
class Name
--------------------------------------------------------------------------------
類庫命名
目前命名空間正在越來越廣泛的被采用,以避免不同廠商和團體類庫間的類名沖突。
當尚未采用命名空間的時候,為了避免類名沖突,一般的做法是在類名前加上獨特的前綴,兩個字符就
可以了,當然多用一些會更好。
例如
John Johnson的數據結構類庫可以用Jj做為前綴,如下:
class JjLinkList
{
}
--------------------------------------------------------------------------------
方法命名
采用與類命名一致的規則
理由
使用所有不同規則的大部分人發現這是最好的折衷辦法。
例如
class NameOneTwo
{
function DoIt() {};
function HandleError() {};
}
--------------------------------------------------------------------------------
類屬性命名
屬性命名應該以字符‘m’為前綴。
前綴‘m’后采用于類命名一致的規則。
‘m’總是在名字的開頭起修飾作用,就像以‘r’開頭表示引用一樣。
理由
前綴@#m@#防止類屬性和方法名發生任何沖突。你的方法名和屬性名經常會很類似,特別是存取元素。
例如
class NameOneTwo
{
function VarAbc() {};
function ErrorNumber() {};
var mVarAbc;
var mErrorNumber;
var mrName;
}
--------------------------------------------------------------------------------
方法中參數命名
第一個字符使用小寫字母。
在首字符后的所有字都按照類命名規則首字符大寫。
理由
你可以隨時知道那個變量對應那個變量。
你可以使用與類名相似的名稱而不至于產生重名沖突。
例如
class NameOneTwo
{
function StartYourEngines(
&$rSomeEngine,
&$rAnotherEngine);
}
--------------------------------------------------------------------------------
變量命名
所有字母都使用小寫
使用@#_@#作為每個詞的分界。
理由
通過這一途徑,代碼中變量的作用域是清晰的。
所有的變量在代碼中都看起來不同,容易辨認。
例如
function HandleError($errorNumber)
{
$error = OsErr();
$time_of_error = OsErr->getTimeOfError;
$error_processor = OsErr->getErrorProcessor;
}
--------------------------------------------------------------------------------
引用變量和函數返回引用
引用必須帶‘r’前綴
理由
使得類型不同的變量容易辨認
它可以確定哪個方法返回可更改對象,哪個方法返回不可更改對象。
例如
class Test
{
var mrStatus;
function DoSomething(&$rStatus) {};
function &rStatus() {};
}
--------------------------------------------------------------------------------
全局變量
全局變量應該帶前綴‘g’。
理由
知道一個變量的作用域是非常重要的。
例如
global $gLog;
global &$grLog;
--------------------------------------------------------------------------------
定義命名 / 全局常量
全局常量用@#_@#分隔每個單詞。
理由
這是命名全局常量的傳統。你要注意不要與其它的定義相沖突。
例如
define("A_GLOBAL_CONST
ANT", "Hello world!";
--------------------------------------------------------------------------------
靜態變量
靜態變量應該帶前綴‘s’。
理由
知道一個變量的作用域是非常重要的。
例如
function test(){ static $msStatus = 0;
}
--------------------------------------------------------------------------------
函數命名
函數名字采用C GNU的慣例,所有的字母使用小寫字母,使用@#_@#分割單詞。
理由
這樣可以更易于區分相關聯的類名。
例如
function some_bloody_function()
{
}
--------------------------------------------------------------------------------
錯誤返回檢測規則
檢查所有的系統調用的錯誤信息,除非你要忽略錯誤。
為每條系統錯誤消息定義好系統錯誤文本以便include。
--------------------------------------------------------------------------------
大括號 {} 規則
在三種主要的大括號放置規則中,有兩種是可以接受的,如下的第一種是最好的:
將大括號放置在關鍵詞下方的同列處:
if ($condition) while ($condition)
{ {
... ...
} }
傳統的
UNIX的括號規則是,首括號與關鍵詞同行,尾括號與關鍵字同列:
if ($condition) { while ($condition) {
... ...
} }
理由
引起劇烈爭論的非原則的問題可通過折衷的辦法解決,兩種方法任意一種都是可以接受的,然而對于大
多數人來說更喜歡第一種。原因就是心理研究學習范疇的東西了。
對于更喜歡第一種還有著更多的原因。如果您使用的字符編輯器支持括號匹配功能的話(例如vi),最
重要的就是有一個好的樣式。為什么?我們說當你有一大塊的程序而且想知道這一大塊程序是在哪兒結
束的話。你先移到開始的括號,按下按鈕編輯器就會找到與之對應的結束括號,例如:
if ($very_long_condition && $second_very_long_condition)
{
...
}
else if (...)
{
...
}
從一個程序塊移動到另一個程序塊只需要用光標和你的括號匹配鍵就可以了,不需要來回的移動到行末去
找匹配的括號。
原文轉自:http://www.anti-gravitydesign.com