php編程命名規則

來源:互聯網
上載者:User
編程 命名是程式規劃的核心。古人相信只要知道一個人真正的名字就會獲得淩駕於那個人之上的不可思議的力
量。只要你給事物想到正確的名字,就會給你以及後來的人帶來比代碼更強的力量。別笑!

名字就是事物在它所處的生態環境中一個長久而深遠的結果。總的來說,只有瞭解系統的程式員才能為系
統取出最合適的名字。如果所有的命名都與其自然相適合,則關係清晰,含義可以推導得出,一般人的推
想也能在意料之中。

如果你發覺你的命名只有少量能和其對應事物相匹配的話, 最好還是重新好好再看看你的設計吧。




類命名
在為類(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_CONSTANT", "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 (...)
{
...
}

從一個程式塊移動到另一個程式塊只需要用游標和你的括弧匹配鍵就可以了,不需要來回的移動到行末去
找匹配的括弧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.