php編碼規則(一)

---恢復內容開始---

<轉載自己整理>

GNU C 庫(GNU C Library,又稱為glibc)是一種按照LGPL許可協議發布的,公開源代碼的,免費的,方便從網絡下載的C的編譯程序。 GNU C運行期庫,是一種C函數庫,是程序運行時使用到的一些API集合,它們一般是已預先編譯好,以二進制代碼形式存在Linux類系統中,GNU C運行期庫,通常作為GNU C編譯程序的一個部分發布。 它最初是自由軟件基金會為其GNU操作系統所寫,但目前最主要的應用是配合Linux內核,成為GNU/Linux操作系統一個重要的組成部分。

解釋性語是指,在執行時由相關程序實時讀取程序語句,然后再編譯執行的語言,這樣的源程序多為文本文件。

命名規范

?? 除了類命名首字母大寫和全局變量和常量全部用大寫字母外,其余的命名都是全部小寫字母且用_隔開。好的命名規范對程序的閱讀是直觀重要的。

1.1 標準化的重要

?? 標準化問題的確在某些方面上讓每個人頭痛,讓人人都覺得大家處于同樣的境地。但是這往 往是因為對標準化的誤解。標準化不是束縛人,他是為了在大型開發過程中,能夠提供項目整體的質量與開發進度。扔掉你的創造力,沒人喜歡這樣的創造力。

?

1.2 優點

?

當一個項目嘗試著遵守公用的標準時,會有以下好處:

?

· 程序員可以了解任何代碼,弄清程序的狀況

?

· 新人可以很快的適應環境

?

· 防止新接觸php的人出于節省時間的需要,自創一套風格并養成終生的習慣

?

· 防止新接觸php的人一次次的犯同樣的錯誤

?

· 在一致的環境下,人們可以減少犯錯的機會

?

· 程序員們有了一致的敵人

?

?

1.3 改進

規范并不是一成不變的,如果你覺得規范缺少東西或者有些不合適的地方,提出來,也許項目管理者會考慮加入,記住,任何項目都取決于團隊合作的努力。

?

1.4 實施

?

一般情況下,規范的實施是由技術負責人或者項目經理執行和監督的。但是最好的方法還是在開發團隊中達成共識,變成一種文化的存在。

?

2 命名規則

?

?? 命名是程序規劃的核心。名字就是事物在它所處的生態環境中一個長久而深遠的結果。

?? 總的來說,只有了解系統的程序員才能為系統取出最合適的名字。如果所有的命名都與其自然相適合,則關系清晰,含義可以推導得出,一般人的推想也能在意料之中。
?? 如果你發覺你的命名只有少量能和其對應事物相匹配的話, 最好還是重新好好再看看你的設計。

?

2.1 文件命名

?

文件名采用C GNU的慣例所有的字母使用小寫字母,使用`_`分割單詞。

?

例如:

news_list.php

文件命名上有些幾乎是約定俗成的單詞,比如

admin前綴表示是后臺管理的文件名,

inc.php后綴則表示包含文件或者類庫文件

class.php后綴表示類庫文件

config.php表示配置文件等。

例如:

admin_user.php

data.inc.php

user.class.php

?

2.2 類命名

· 使用大寫字母作為詞的分隔,其他的字母均使用小寫
· 名字的首字母使用大寫
· 不要使用下劃線(`_`)
例如
class NameOneTwo
class Name

注意:

· 在為類(class )命名前首先要知道它是什么。如果看到類名,你還是想不起這個類是什么的話,那么你的設計就還做的不夠好
· 超過三個詞組成的混合名是容易造成系統各個實體間的混淆,再看看你的設計,嘗試使用(CRC Session card)看看該命名所對應的實體是否有著那么多的功用。
· 對于派生類的命名應該避免帶其父類名產生關系,一個類的名字只與它自身有關,和它的父類叫什么無關。
· 有些后綴名是幾乎是約定俗成的,例如:如果你的系統使用了代理(agent ),那么就把某個部件命名為“下載代理”(DownloadAgent)用以真正的傳送信息。

??? 當然,這些約定俗成的詞匯不會自動出現,需要小組人員的不斷總結。

?

2.2.1 縮寫詞不要全部使用大寫字母

· 無論如何,當遇到以下情況,你可以用首字母大寫其余字母小寫來代替全部使用大寫字母的方法來表示縮寫詞。
使用: GetHtmlStatistic.
不使用: GetHTMLStatistic.
理由
· 當命名含有縮略詞時,人們似乎有著非常不同的直覺。統一規定是最好,這樣一來,命名的含義就完全可以預知了。
舉個NetworkABCKey的例子,注意C是應該是ABC里面的C還是key里面的C,這個是很令人費解的。有些人不在意這些,其他人卻很討厭這樣。所以你會在不同的代碼里看到不同的規則,使得你不知道怎么去叫它。
例如
class FluidOz // 不要寫成 FluidOZ
class GetHtmlStatistic // 不要寫成 GetHTMLStatistic

2.3 類庫命名

· 目前命名空間正在越來越廣泛的被采用,以避免不同廠商和團體類庫間的類名沖突。
· 當尚未采用命名空間的時候,為了避免類名沖突,一般的做法是在類名前加上獨特的前綴,兩個字符就可以了,當然多用一些會更好。
例如
John Johnson的數據結構類庫可以用Jj做為前綴,如下:
class JjLinkList
{
}
另一種折中方式是建立包含類庫目錄(事實上Java也是這么做的),以不通的目錄代表不同的命名空間。
例如
Microsoft的數據庫相關類庫可以在:
/classes/com/Microsoft/ Database/DbConn.php
Apache的數據庫相關類庫可在:
/classes/org/apache/Database/DbConn.php

2.4 類屬性命名

· 類屬性用C GNU的慣例,所有的字母使用小寫字母,使用`_`分割單詞。

例如
class NameOneTwo
{

function var_abc() {};

function error_number() {};

var $var;

var $error_number;

var $name;

}

?

2.5 方法命名

?

·函數名字用C GNU的慣例,所有的字母使用小寫字母,使用`_`分割單詞。

例如
class NameOneTwo
{

?

function do_it() {};

?

function handle_error() {};

?

}

?

· 通常 每個方法都是執行一個動作的,所以對它們的命名應該清楚的說明它們是做什么的:用check_for_errors()代替error_check(), 用dump_data_to_file()代替data_file()。這么做也可以使功能和數據成為更可區分的物體。
· 有時后綴名是有用的:
o Max - 含義為某實體所能賦予的最大值。
o Cnt - 一個運行中的計數變量的當前值。
o Key - 鍵值。
例如:retry_max 表示最多重試次數,retry_cnt 表示當前重試次數。
· 有時前綴名是有用的:
o Is - 含義為問一個關于某樣事物的問題。無論何時,當人們看到Is就會知道這是一個問題。
o Get - 含義為取得一個數值。
o Set - 含義為設定一個數值
例如:is_hit_retry_limit。

?

?

2.6 方法中參數命名

·函數名字采用C GNU的慣例,所有的字母使用小寫字母,使用`_`分割單詞。

例如
class NameOneTwo
{

function start_your_engines(

&$some_engine,

&$another_engine);

}

?

2.7 變量命名

· 所有字母都使用小寫
· 使用`_`作為每個詞的分界。
理由
· 通過這一途徑,代碼中變量的作用域是清晰的。
· 所有的變量在代碼中都看起來不同,容易辨認。
例如
function handle_error($errorNumber)
{

$error = OsErr($errorNumber);

$time_of_error = $error->get_time_of_error();

$error_processor = $error->get_error_processor();
}

?

2.8全局常量

· 全局常量`_`分隔每個單詞,并且全部單詞大寫。

理由
這是命名全局常量的傳統。你要注意不要與其它的定義相沖突。
例如
define("A_GLOBAL_CONSTANT", "Hello world!");

?

2.9 靜態變量

· 靜態變量應該帶前綴‘s’。

理由
· 知道一個變量的作用域是非常重要的。
例如
function test()
{

static $msStatus = 0;

}

?

2.10 函數命名

?

· 函數名字采用C GNU的慣例,所有的字母使用小寫字母,使用`_`分割單詞。
理由

?

· 這樣可以更易于區分相關聯的類名。

?

例如

?

function some_bloody_function()
{

?

}

?

2.11 錯誤返回檢測規則

?

· 檢查所有的系統調用的錯誤信息,除非你要忽略錯誤。
· 為每條系統錯誤消息定義好系統錯誤文本以便include。

?

3 書寫規則

?

3.1 大括號{}

?

在三種主要的大括號放置規則中,有兩種是可以接受的,如下的第一種是最好的:
· 將大括號放置在關鍵詞下方的同列處:

?

if ($condition)

?

{
... ...
}

?

while ($condition)
{
... ...
}
·
傳統的UNIX的括號規則是,首括號與關鍵詞同行,尾括號與關鍵字同列:
if ($condition) {

?

... ...

?

}

?

while ($condition) {
... ...
}

?

理由:

?

引起劇烈爭論的非原則的問題可通過折衷的辦法解決,兩種方法任意一種都是可以接受的,然而對于大多數人來說更喜歡第一種。原因就是心理研究學習范疇的東西了。

?

對于更喜歡第一種還有著更多的原因。如果您使用的字符編輯器支持括號匹配功能的話(例 如vi),最重要的就是有一個好的樣式。為什么?我們說當你有一大塊的程序而且想知道這一大塊程序是在哪兒結束的話。你先移到開始的括號,按下按鈕編輯器 就會找到與之對應的結束括號,例如:

?

if ($very_long_condition && $second_very_long_condition)
{
...
}
else if (...)
{
...
}
從一個程序塊移動到另一個程序塊只需要用光標和你的括號匹配鍵就可以了,不需找匹配的括號。

?

3.2 縮進:制表符vs空格

?

在書寫代碼的時候,必須注意代碼的縮進規則,我們規定:使用4個空格作為縮進而不使用tab縮進(對于ultraedit,可以進行預先設置)。

?

·對于最大縮進層數,并沒有一個固定的規矩,假如縮進層數大于四或者五層的時候,你可以考慮著將代碼因數分解(factoring out code)。
理由
· 許多編程者支持制表符。 但制表符標準在各種編程工具下、各種平臺下所代表的空格數或者意義是不同的。這樣會使在一個平臺下格式良好的代碼在另一個平臺下不堪入目。對于php的開發來說,通常情況下是在win平臺下開發,linux下部署,尤其需要注意這個問題。
· 雖然此處沒有限定最大的縮進層數,但是通常建議不要超過四層、五層。
例如:

?

function func()
{
if (something bad)
{
if (another thing bad)
{
while (more input)
{
}
}
}
}

?

3.3 小括號、關鍵詞和函數

?

· 不要把小括號和關鍵詞緊貼在一起,要用空格隔開它們
·
小括號和函數名間沒有空格;如$test = date("ymdhis")
·
除非必要,不要在Return返回語句中使用小括號
理由
· 關鍵字不是函數。如果小括號緊貼著函數名和關鍵字,二者很容易被看成是一體的。
例如
if (condition)
{
}

while (condition)
{
}

strcmp($s, $s1);

return 1;

?

3.4 類的構造函數

?

別在構造函數中做實際的工作, 構造函數應該包含變量的初始化和(或)不會發生失敗的操作。
理由
· 構造不能返回錯誤 。

?

例如
class Device
{
function device() { /* initialize and other stuff */ }
function open() { return FAIL; }
};

$dev = new Device;
if (FAIL == $dev->open()) exit(1);

?

3.5 =符號書寫

?

在程序中=符號的書寫遵循以下規則:

?

1=符號的兩側,均需留出一個空格;如$a = $b if ($a = = $b)等;

?

2在一個申明塊,或者實現同樣功能的一個塊中,要求=號盡量上下對齊,左邊可以為了保持對齊使用多個空格,而右邊要求空一個空格;如下例:

?

$testa?? = $aaa;

?

$testaa = $bbb;

3.6 控制結構

3.6.1 if then else 格式

不同的花括號樣式會產生些微不同的樣觀。一個通用方式是:
if (條件1) // 注釋
{
}
else if (條件2) // 注釋
{
}
else // 注釋
{
}
如果你有用到else if 語句的話,通常最好有一個else塊以用于處理未處理到的其他情況。可以的話放一個記錄信息注釋在else處,即使在else沒有任何的動作。

·總是將恒量放在等號/不等號的左邊,例如:
if ( 6 == $errorNum ) ...
一個原因是假如你在等式中漏了一個等號,語法檢查器會為你報錯。第二個原因是你能立刻找到數值而不是在你的表達式的末端找到它。需要一點時間來習慣這個格式,但是它確實很有用。

?

3.6.2 switch 格式

?

· 當一個case塊處理后,直接轉到下一個case塊處理,在這個case塊的最后應該加上注釋。
· default case總應該存在,它應該不被到達,然而如果到達了就會觸發一個錯誤。
· 如果你要創立一個變量,那就把所有的代碼放在塊中。
例如
switch (...)
{
case 1:
...
// FALL THROUGH
case 2:
{
$v = get_week_number();
...
}
break;

default:
}

?

3.6.3 continue break

?

continue 和 break 其實是變相的隱蔽的 goto方法。(goto 一般就是跳出循環的方法)
continue 和 break 像 goto 一樣,它們在代碼中是有魔力的,所以要節儉(盡可能少)的使用它們。使用了這一簡單的魔法,由于一些未公開的原因,讀者將會被定向到只有上帝才知道的地方去。
continue有兩個主要的問題:
· 它可以繞過測試條件。
· 它可以繞過等/不等表達式。
看看下面的例子,考慮一下問題都在哪兒發生:
while (TRUE)
{
...
// A lot of code
...
if (/* some condition */) {
continue;
}
...
// A lot of code
...
if ( $i++ > STOP_VALUE) break;
}
注意:"A lot of code"是必須的,這是為了讓程序員們不能那么容易的找出錯誤。
通過以上的例子,我們可以得出更進一步的規則:continue 和 break 混合使用是引起災難的正確方法。

?

3.6.4 ?:

?

?:本身沒什么問題,問題在于人們往往試著在 ? 和 : 之間塞滿了許多的代碼。以下的是一些清晰的連接規則:
· 把條件放在括號內以使它和其他的代碼相分離。
· 如果可能的話,動作可以用簡單的函數。
· 把所做的動作,“?”,“:”放在不同的行,除非他們可以清楚的放在同一行。
例如
(condition) ? funct1() : func2();

or

(condition)
? long statement
: another long statement;

?

?

http://blog.csdn.net/crown00000/article/details/7256908(摘自)

?

?

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/honoir/archive/2013/06/05/3119339.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376631.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376631.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376631.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下載數據, 上傳數據, 上傳文件...

重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下載數據, 上傳數據, 上傳文件 原文:重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下載數據, 上傳數據, 上傳文件[源碼下載] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下載數據, 上傳數據, 上傳…

【經驗貼】smartCarers在比賽后如何獲取更好的發展

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 由于最近專欄開了付費,群友讓更新一些經驗貼,于是有了這篇文章。 一般來說,比賽完了之后是大二結束的暑假,此時有這么幾條…

isset()和empty()到底區別是什么。

一招鮮吃遍天&#xff0c;自從看了燕十八關于PHP變量內部機制的那課&#xff0c;解釋了一些很久的疑惑&#xff0c;知其然還知其所以然&#xff0c;果然是學習的最佳途徑&#xff0c;比背下來要重要N倍。 我們知道一個變量有變量表的位置&#xff0c;然后他指向自己的內存地址&…

html清除圖片緩存

img.src ?t(new Date()); 如&#xff1a; <img id "5" src"../../../pics/prod_146/__INLINE__user_nums_cmp_146.png?t"(new Date()) width"1024">

分享下自己編譯 XBMC 的過程(zhuan)

刷YunOS贏魅族MX3首先要感謝下網上其他網友的經驗&#xff0c;沒有這些經驗有的問題還是不太好解決&#xff5e; 先介紹下編譯環境&#xff0c;操作系統是 CentOS 6.5 64位 (最小桌面版本安裝&#xff0c;除了最基本的組件外&#xff0c;類似 java 什么的都沒有安裝)&#xff0…

使用Xcode和Instruments調試解決iOS內存泄露

雖然iOS 5.0版本之后加入了ARC機制&#xff0c;但由于相互引用關系比較復雜時&#xff0c;內存泄露還是可能存在。所以了解原理很重要。 這里講述在沒有ARC的情況下&#xff0c;如何使用Instruments來查找程序中的內存泄露&#xff0c;以及NSZombieEnabled設置的使用。 本文假設…

0755、0644、0600 linux文件權限

0755->即用戶具有讀/寫/執行權限&#xff0c;組用戶和其它用戶具有讀寫權限&#xff1b; 0644->即用戶具有讀寫權限&#xff0c;組用戶和其它用戶具有只讀權限&#xff1b; 0600->僅擁有者具有文件的讀取和寫入權限

[Android] (在ScrollView里嵌套view)重疊view里面的onTouchEvent的調用方法

在我前面的自定義裁剪窗口的代碼中&#xff0c;我把裁剪的view放在了大的scrollview里&#xff0c;這樣就出現了程序只能觸發scrollview&#xff0c;無法操作我的裁剪窗口。所以我加了那篇博客下面最后兩段代碼。其實我遇到這個問題的時候是在一個scrollview里添加了一個Editte…

帶點擊事件的Spinner

最近有一個蛋疼的需求&#xff0c;在下拉框中&#xff0c;如果只有一個值&#xff0c;默認顯示出來&#xff0c;有兩個或者沒有顯示請選擇&#xff0c;沒有點擊不彈框&#xff0c;但是要清空&#xff0c;兩個點擊開要移掉請選擇字樣的項 本來以為很簡單&#xff0c;后來發現沒有…

linux進程間通信快速入門【二】:共享內存編程(mmap、XSI、POSIX)

文章目錄mmap內存共享映射XSI共享內存POSIX共享內存參考使用文件或管道進行進程間通信會有很多局限性&#xff0c;比如效率問題以及數據處理使用文件描述符而不如內存地址訪問方便&#xff0c;于是多個進程以共享內存的方式進行通信就成了很自然要實現的IPC方案。LInux給我們提…

ROBOTS.TXT屏蔽筆記、代碼、示例大全

自己網站的ROBOTS.TXT屏蔽的記錄&#xff0c;以及一些代碼和示例&#xff1a; 屏蔽后臺目錄&#xff0c;為了安全&#xff0c;做雙層管理后臺目錄/a/xxxx/&#xff0c;蜘蛛屏蔽/a/&#xff0c;既不透露后臺路徑&#xff0c;也屏蔽蜘蛛爬后臺目錄 緩存&#xff0c;阻止蜘蛛爬靜態…

五大主流瀏覽器 HTML5 和 CSS3 兼容性比較

轉眼又已過去了一年&#xff0c;在這一年里&#xff0c;Firefox 和 Chrome 在拼升級&#xff0c;版本號不斷飆升&#xff1b;IE10 隨著 Windows 8 在去年10月底正式發布&#xff0c;在 JavaScript 性能和對 HTML5 和 CSS3 的支持方面讓人眼前一亮。這篇文章給大家帶來《五大主流…

Ubuntu下將Sublime Text設置為默認編輯器

轉自將Sublime Text 2設置為默認編輯器 修改defaults.list 編輯/etc/gnome/default.list文件&#xff0c;將其中的所有gedit.desktop替換為sublime_text.desktop。 sublime_text.desktop在/opt/sublime_text目錄下&#xff0c;使用ls -al *sublime*命令查看具體文件名。 轉載于…

python獲取最近N天工作日列表、節假日列表

# 獲取最近兩周工作日列表、節假日列表 import datetime import chinese_calendar import time import pandas as pd# 將時間戳轉換成格式化日期 def timestamp_to_str(timestampNone, format%Y-%m-%d %H:%M:%S):if timestamp:time_tuple time.localtime(timestamp) # 把時間…

保存頁面的瀏覽記錄

我的設計思想是將用戶的瀏覽記錄保存到cookie里面&#xff0c;然后根據情況處理。cookie里面的數據格式是json格式&#xff0c;方便根據自己的需要添加或者修改屬性。引用了3個js文件,下載地址如下。 https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js …

開竅小老虎,一步一個腳印之 初識匯編(一)

最近一直浸淫在計算機編程中無法自拔。哲學 認識論中講過。人類的求知的過程是由兩次飛躍。第一是從感性認識到理性認識&#xff1b;第二是從理性認識到實踐。這段話對有些人是適用的。我就是其中的一名。在知乎上求助問題“學計算機要懂匯編嗎&#xff1f;”&#xff0c;地下有…

python腳本 請求數量達到上限,http請求重試

由于在內網發送http請求同一個token會限制次數&#xff0c;所以很容易達到網關流量上限。 業務中使用了多線程并發&#xff0c;一個線程發起一次http請求&#xff0c;得到正確結果后返回。這里采用的策略是&#xff0c;如果解析出來達到流量上限&#xff0c;那么該線程休眠一段…

shell 字符串操作

string"abcABC123ABCabc" 字符串長度: echo ${#string} #15 echo expr length $string #15 索引 用法&#xff1a;expr index $string $substring expr index $string "ABC" #4 提取子串 用法&#xff1a;${string:position} echo ${string:3} #A…

Linux 之目錄 -鳥哥的Linux私房菜

因為利用 Linux 來開發產品或 distributions 的社群/公司與個人實在太多了, 如果每個人都用自己的想 法來配置檔案放置的目錄,那么將可能造成很多管理上的困擾。 你能想象,你進入一個企業之后,所 接觸到的 Linux 目錄配置方法竟然跟你以前學的完全不同嗎? 很難想象吧~所以,后來…

python腳本:向表中插入新數據,刪除表中最舊的數據

一張表存儲歷史數據&#xff0c;最多存儲HISTORY_TABLE_MAX_ROWS條數據&#xff0c;當表中數據未達到HISTORY_TABLE_MAX_ROWS&#xff0c;直接插入&#xff1b;如果達到的話需要保證插入新數據的時候將最舊的數據刪除 這里使用先update最新數據&#xff0c;然后再重新update全表…