PHP開發規範!

來源:互聯網
上載者:User

一、規範前言篇

標準化不是特殊的個人風格,它讓程式員可以瞭解任何代碼,弄清程式的狀況;新人可
以很快的適應環境;防止新接觸php的人一次次的犯同樣的錯誤;在一致的開發環境下,
可以減少人們犯錯的機會。本規範的標準在絕對多數應用上為仿照java技術體系,因為
java技術體系以其眾多成功的案例成為大部分電腦應用程式層的工業標準,此外便於日後
公司向java技術體系轉型。

二、命名定義篇

局部變數命名

使用英文名詞、動詞,以大寫字母作為單詞的分隔,其他的字母均使用小寫,單詞的
首個字母使用小寫,不使用底線,例:

$repeatCount = '';
$delUserSql  = '';

全域常量命名

使用英文名詞、動詞,所有字母都使用大寫,以底線分隔每個單詞,例:

define( 'WEBSITE_NAME', '名稱' );
define( 'WEBSITE_URL',  '地址' )

陣列變數命名

使用英文名詞、動詞,以大寫字母作為單詞的分隔,其他的字母均使用小寫,單詞的首
個字母使用小寫,不使用底線,以字串Array為尾碼,例:

$scopeArray  = array();
$bookIdArray = array();

靜態變數命名

使用英文名詞、動詞,以大寫字母作為單詞的分隔,其他的字母均使用小寫,單詞的首
個字母使用小寫,不使用底線,以字串Static為尾碼,例:

function getDirectoryFile()
{
 static $fileArrayStatic = '';
 static
$fileNumStatic   = '';
 ...
}

物件變數命名

使用類名稱為變數首碼,所有字母都使用大寫,以字串_OBJECT為尾碼,例:

$USERACCOUNT_OBJECT   = new UserAccount();
$PAINTINGORDER_OBJECT = new
PaintingOrder();

類命名

使用英文名詞,以大寫字母作為詞的分隔,其他的字母均使用小寫,名詞的首個字母
使用大寫,不使用底線,例:

class UserAccount
{
 ...
}

class PaintingOrder
{
 ...
}

方法命名

使用英文名詞、動詞,以大寫字母作為詞的分隔,其他的字母均使用小寫,單詞的首個
字母使用小寫,不使用底線,例:

class UserAccount
{
 function isAccountOk()
 {
  ...
 }

 function addAccount()
 {
  ...
 }
}

方法中參數命名

使用英文名詞、動詞,以大寫字母作為詞的分隔,其他的字母均使用小寫,單詞的首個字母
使用小寫,不使用底線,例:

class UserAccount
{
 function isAccountOk( $accountName )
 {
 
$this->accountName = $accountName;
  ...
 }

 function addAccount( $inputDataArray )
 {
  $this->inputArray =
$inputDataArray;
  ...
 }

 var $accuntName = '';
 var $inputArray = '';
}

類屬性命名

使用英文名詞、動詞,以大寫字母作為詞的分隔,其他的字母均使用小寫,單詞的首個字母
使用大寫,不使用底線,對於類屬性為某個物件變數,則以字串Object為尾碼,例:

class UserAccount
{
 function IsAccountOk()
 {
  ...
 }

 function AddAccount()
 {
  ...
 }

 var $tableName      = '';
 var $databaseObject = '';
}

三、文法書寫篇

大括弧{}規則

將大括弧放置在關鍵詞下方的同列處,例:

if ( $condition )
{
 ...
}

不使用此種方式:

if ( $condition ) {
 ...
}

代碼縮排規則

使用定位字元縮排(TAB鍵)或四個空格。如果縮排層數大於四的時候,請重新設計該項商務邏輯的演算法。

小括弧()規則

不要把小括弧和關鍵詞、方法名、方法參數緊貼在一起,要用一個空格分隔,例:

if ( $condition )
{
 ...
}

function addAccount( $inputDataArray )
{
 ...
}

由於小括弧與關鍵詞等緊貼容易被看成是一體,因此不要使用以下方式,例:

if ($condition) {
 ...
}

function addAccount($inputDataArray)
{
 ...
}

if .. else ... 規則

通常最好有一個else塊以用於處理未處理到的或未知的其他情況,即使條件處理語句
只有一個也必須使用大括弧{},例:

if ( $condition1 )
{
 ...
}
else if ( $condition2
)
{
 ...
 ...
}
else
{
 ...
}

儘可能避免以下使用方式,例:

if ( $condition1 )
 ...
else
 ...

switch規則

每個case塊結束處必須加上break,而default總應該存在處理未知情況,例:

switch( $condition )
{
 case $value1:
  ...
  break;
 case
$value2:
  ...
  break;
 default:
  ...
  break;
}

聲明定位規則

聲明代碼塊需要對齊,且初次使用變數時需要初始化,例:

var $tableName      = '';
var $databaseObject = '';

不使用以下方式,例:

var $tableName;
var $accuntName = '';
var $databaseObject = '';

四、其它說明篇

所有類方法必須有傳回值,除結果簡單外返回true或者false之外,其它方法應返回不同的值
以交作流程進一步處理。

html的form表單統一不設定submit按鈕的名稱屬性(name)。

html的form表單各個元素名稱與資料庫欄位保持一致。

每行一個語句。

不要採用預設方法測試非零值,必須顯式測試,例:

if ( false != $this->IsAccountOk()
)
{
 ...
}
else
{
 ...
}

不要使用以下方式,例:

if ( $this->IsAccountOk()
)
{
 ...
}
else
{
 ...
}

不要使用三元邏輯符 ? :,但對變數的賦值除外,例:

$_GET['act']   = !empty( $_GET['act'] ) ? $_GET['act'] : 'v_login';

統一使用<?php ?>,禁止使用<? ?>格式。

對於get、post、session類型變數,必須使用$_GET、$_POST、$_SESSION方式定義和調用。

儘可能使用單引號''而不是雙引號''。

使用完畢後的陣列變數、物件變數、查詢集合必須馬上使用unset()、free_result()釋放資源。

一個php檔案只能包含一個類定義編碼,以類名稱作為檔案名稱。

php檔案中絕不能出現html語句,html檔案中儘可能避免出現php語句。

html檔案必須通過w3c的html4檢測認證(http://validator.w3.org/
)。

如果發覺您在程式中的命名只有少量能和其對應事物相匹配的話,請重新設計系統。

在為類命名前首先要知道它是什麼。如果通過類名提供的線索,您還是想不起這個類是什麼的話,
那麼您的設計是做得不夠好。

超過三個單片語成的混合名是容易造成系統各個實體間的混淆,請重新設計類。

通常每個方法只執行一項邏輯動作事務,所以對它們的命名應該清楚的說明它們是做什麼的:用checkForErrors()代替errorCheck(),用dumpDataToFile()代替dataFile()。
這麼做使功能和資料成為更可區分的物體。

五、程式注釋篇

類的注釋

/*
* Purpose:
* 作為通用介面訪問資料庫的類
* Class Name:
* Database
*
Author:
* unixdotnetyjx_hao123@163.com

* Modifications:
*
2004-08-18 09:15
* 添加db_insert_id()方法
* unixdotnetyjx_hao123@163.com

* See: 參照說明
*/

class Database
{
 ……
}

類方法的注釋

/*
* Purpose:
* 取得上一步資料庫insert操作產生的id
* Method Name:
*
getInsertId()
* Parameter:
* Return:
* int
* Author:
* unixdotnet
yjx_hao123@163.com

* Modifications:

* 2004-08-18 09:15
* 修改原因
* unixdotnet yjx_hao123@163.com

* See: 參照說明
*/

function getInsertId()
{
 ...
}

類屬性的注釋

class Database
{
 /*
 * Purpose:
 * 串連資料庫所需的使用者名稱
 *
Attribute Name:
 * $databaseUserName
 * Type: string
 * Author:
 *
unixdotnet yjx_hao123@163.com

 *
Modifications:
 * 2004-08-18 09:15
 * 修改原因
 * unixdotnet yjx_hao123@163.com

 * See: 參照說明
 */

 var $databaseUserName;
 ...
}

六、資料庫應用篇

資料庫的設計必須符合三個範式(極端要求常用高速時考慮單獨設定記錄表除外)。

資料庫名稱應該由概述項目內容的小寫英文名片語成,以底線分隔單詞,
避免跨平台時可能出現的大小寫錯誤。

資料表名稱應該由物件對象名稱的小寫英文名片語成(儘可能對應系統中的業務類名稱),
以底線分隔單詞,避免跨平台時可能出現的大小寫錯誤。

資料表的欄位應避免使用varchar、text等不定長的類型,時間資訊的欄位使用unix tiemstamp類型儲存。

查詢資料時禁止使用*萬用字元避免佔用資源加速處理速度,盡量避免使用暫存資料表。

查詢資料連線多表時各資源應該使用全名稱,即tableName.fieldName,而不是fieldName。

SQL語句應儘可能符合ansi92標準,避免使用特定資料庫對SQL語言的擴充特性。

開發結束後,必須針對SQL查詢語句的條件陳述式部分(where)添加索引,
須匹配多個條件的應該使用彙總索引。

索引的組成應由左至右匹配條件陳述式的順序。

嚴禁盲目添加索引,避免減慢資料插入的速度、增大佔用空間及減慢查詢速度。

每當資料庫(表)發生結構性變化時須登記儲存;日常須定時(不超過三個工作日)
備份資料庫結構及其資料。

1.
給php變數賦值為字串,盡量用單引號。單引號速度要快很多。
2.
給php變數賦值時,值中帶變數,就的用雙引號了,雙引號能自動解析變數,方便很多。
   如$b=blue; $a="php$b"; echo $a;
輸出phpblue (單雙引號各有千秋啊)
3. html內盡量用雙引號,無論多長拿到php中首尾加單引號就行,甭怕錯。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.