php代碼規範草案(phpchina)

來源:互聯網
上載者:User

 

草案 0.0.1

一。Zend Framework規範以下文為主:

Zend Framework 編碼規範

http://bbs.phpchina.com/viewthread.php?tid=142789


二。常規規範

1.變數命名與類的命名
(1) 類型 + 變數名: $inum
基於PHP語言弱類型的特點,以匈牙利命名法為參考,但國人不習慣大寫字母,所以純小寫,為基本規範。
一個類型字元+命名的方式,比如 $susername
s代表字串,i代表整型,a代表數組,o代表對象, r代表資源, b布爾型, d日期,例子:

  $inum = 55;

  $itotal = 110;

  $susername = 'root';

  $spassword = '123456';

  $rlink = mysql_connect('localhost', 'root', '123456');

  $odb = new dbstuff();

  $anumber = array(1, 2, 3, 4, 5);

  $ddate = '2010-06-04';


特殊常用的少數變數,可以不用書寫首碼,比如:
$uid, $sid, $sql, $row, $db, $i, $j, $k, $v或者$key, $value

這種書寫方式缺點:略需一點適應成本,但習慣後對程式員的類型思維有協助,對團隊開發和代碼閱讀調試意義重大。

(2) 常用的命名及資料庫設計欄位類型及長度字串類型一般沒有預設值,而非主鍵的數實值型別,非空,預設值為0。
username 使用者名稱, char(16)
password 密碼, char(32)
email 郵件, char(50)
dateline 時間,int(10)
register 註冊
login 登陸
adminid 管理員id, 某某id的命名,採用 名字+id的方式,

比如groupid,
常用的id可用縮寫替代:比如
uid 使用者id, mediumint(8)
sid SESSION id
displayorder 文章或類別現實順序 smallint(6), -2為未審核, -1 忽略, 0以上為正常順序。
基本規範摘取了Discuz設計資料庫的用法,效率是有目共睹的。


(3) 表示總數的命名,請用複數形式,如:
$iviews 總瀏覽數
$ireplies總回複數
$iclicks總點擊數

(4) 表示許可權判斷的命名,請在前面附加allow,如
$ballowview
$ballowpost
$ballowvisit

(5) 常規變數定義一般不使用底線_,中劃線- 和大寫字母,特殊字元等。

(6) 類名
類名在使用中經常遇到命名空間的問題,因此,類名的命名規範除了要遵循普通命名規則以外,還需在類名前附加產品和所屬模組名稱。
該名稱最好與表名首碼一致。如:
例如:

   class cdb_trade_cart {

       ……

   }

 


(7) 欄位名採用匈牙利命名法的好處:
程式中出現SQL語句時,陌生欄位基本不用去查看錶結構。

如:
susername,
spassword,
idateline

2. 書寫細節規範
(1) 空格:
A. 等號或其他運算子兩邊各有一個空格,比如
$inum = 55;
$inum = 55 + 66;
B. 並列的各項中間用逗號分隔,其後要有一個空格。如:
array(1, 2, 3)而非array(1,2,3)
C. if語句中,if關鍵字後沒有空格,而小括弧的條件之後有空格,比如

   if($inum == 55) {

      ……

   }


(2) 斷行,如果語句過長(預設為80字元)時,需要斷行譬如:

   array(

     'a' => '這是一個字串',

     'b' => '這是第二個字串',

     'c' => '這是第三個字串'

   )

複製代碼


(3) 縮排
以4個空格為一個縮排單位為準。
兩種方案:
A. 統一用Tab鍵,在代碼書寫完發布前,用編輯器功能統一替換為4個空格
B. 手動敲4個空格,或者編輯器功能自訂

(4) 大括弧與小括弧
大括弧的兩種方案:
A.


   if() {

       ……

   } elseif() {

       ……

   } elseif() {

       ……

   } else {

       ……

   }


B.


   if()

   {

       ……

   }

   elseif()

   {

       ……

   }

   else

   {

      ……

   }

 

小括弧,在運算子優先順序容易產生混淆的地方,必須用小括弧括起來,在變數拼接時,如果出現某個變數值作為字串的一部分,或者模板中複雜嵌套,要用大括弧{}括起來。
如 $sql = "SELECT uid FROM {$tablepre}members";
或 模板中:{$aarray[$key][sec]}

(5) 單引號,雙引號與SQL
盡量使用單引號,比如
$susername = 'root';
在寫數組的索引時,必須使用單引號:
如 $alist['key']的方式,而不是$alist[key]。

單雙引號的嵌套組合,SQL語句(關鍵字需大寫)拼接的推薦寫法。欄位名可使用``號區隔。
A. $sql = "SELECT `uid` FROM {$tablepre}members WHERE `username` = '$gsusername' LIMIT 1";
外層是雙引號,所以裡面在單引號內的變數能夠解析。
單引號表明裡面的值是個字串。
這樣的拼接方式好處在於易讀性。
B. $sql = 'SELECT `uid` FROM '.$tablepre.'members WHERE `username` = /''.$gsusername.'/' LIMIT 1';
這樣書寫的好處是效率會高點,但是語句比較不易讀,需要逸出字元,稍微繁複。

其他常用拼接:
HTML時,$sform = '<input type="text" name="username" />';
3. 程式語句段書寫規範
(1) 先按先後依賴關係分順序,再按功能分隔語句段。
如關於 $sid 有50行語句段A,前面依賴通用功能定義。
那麼通用功能定義語句應在A段代碼之前。
A段代碼,和其他功能段代碼,都應該成塊狀。

比如500行檔案,可分為段A、B、C、D、E等。
各段之間用兩個空行區隔開

(2) 功能段內部語句段順序
A. 變數賦初值
B. 確定主要功能邏輯段所用到的變數值
C. 主功能邏輯段
D. 返回、輸出或其他動作

(3) 後台管理功能塊或其他功能塊的基本劃分:
A. 用表單的提交元素判斷切分開邏輯層與表現層
如 <input type="submit" name="registersubmit" />
那麼,在代碼中通過


   $pssubmit = $_POST['registersubmit'];

   if(empty($pssubmit)) {

       //表現層代碼

   } else {

       //邏輯層代碼

   }


B. 邏輯層可通過表現層的輸入表單元素的name 值來區隔開增刪查改。
如<input type="text" name="gender[]" value="" />,則判斷數組$pagender是否有值來變更操作
<input type="checkbox" name="delete[]" value="" />, 則判斷數組$padelete是否有值來進行刪除操作
……
(4) 迴圈體
A. 在迴圈體內,不允許出現重複計算。
如:

   $sstring = 'abcdef';

   //低效率的寫法

   foreach($i = 0; $i < strlen($sstring); $i++) {

       ……

   }

   //高效寫法應該是:

   $ilength = strlen($sstring);

   foreach($i = 0; $i < $ilength; $i++) {

       ……

   }


B. 在函數迴圈體內實現接收參數可以是單值,也可以是數組。如(參考discuz):

   function decho($input) {

       if(is_array($input)) {

           foreach($input as $v) {

               decho($v);

           }   

        } else {

          echo $input;

        }

   }


C. 盡量減少迴圈次數,如以下例子:

   function neworder($aarray) {

       sort($aarray);

       $inum = count($aarray);

       $iloop = round($inum / 2);

       for($i = $inum; $i > $iloop; $i--){

           $anewarray[] = $aarray[$i - 1];

           $anewarray[] = $aarray[$inum - $i];

       }

       if($inum % 2 <> 0) {

           $anewarray[] = $array[floor($inum / 2)];

       }

聯繫我們

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