ZendFramework,php編碼規範

來源:互聯網
上載者:User

記得以前寫過一個php編碼規範的文章,這裡的格式是zf的規範,大部分可以應用於非zf項目的PHP。

說實話在程式正確的情況下,我有部分沒有遵守。

PHP檔案格式

1.?>

?>這個如果是結尾,在PHP中不是必須寫的。不寫的目的是為了防止出現?>之後出現空格造成檔案有輸出。有輸出也許就會出現session already send之類的錯誤。盡量讓?>後面沒有輸出,有了zf,代碼和頁面混合編碼已經是上上上個世紀的事情了,所以你的程式要是有了?>後面出現 別的,那看來還要繼續啃手冊了,啃啃view和controller做為預習。

2.縮排

4個空格,這個已經成為軟體業標準了。

3.行最大長度

建議是每行最多是80個字元,最多不超過120個。出螢幕了還需要拉橫向捲軸,所以盡量多加換行。習慣問題,有人就是寬屏,160個字都夠。

4.分行符號

zf手冊建議是使用unix like的換行,不要使用mac和windows的換行

就是用\n ,不用\r或者\r\n

這個沒發現有什麼必要,能省一個符號?還是php主要跑在unix like上?恩

命名方式

1.類

zf的類名字這樣的:

這個我解釋不太清楚,如果能看手冊的盡量看手冊。

我只舉幾個例子做下簡單的解釋:

zf的類都寫在Zend/目錄下

Zend/Db/Table.php 這個檔案裡面的類就是 Zend_Db_Table

同樣:Zend/Feed/Rss.php 這個檔案裡面的類就是Zend_Feed_Rss

注意類名和檔案路徑和檔案名稱都是匹配的,還要注意是每個單詞首字母要大寫。

注意:自己寫的類不要使用Zend_開頭。

2.介面

這個和類基本相同

只是多了一點,就是必須以_Interface結尾,所以看到檔案名稱為Interface的就是介面了。

例如:Zend_Controller_Dispatcher_Interface

3.檔案名稱

除了以上類型外,其他的檔案名稱可以使用以字母和底線開頭的字母數字底線橫線("-"),禁止使用空格。

所有的php代碼檔案必須是.php結尾。

例如:Zend/Controller/Front.php

例如:Zend/View/Helper/FormRadio.php

4.函數和方法

函數(function)只能用以字母開頭的字母數字。

zf建議所有的function都放到class中。

函數名必須是小寫字母開頭,如果是多個單片語成,其餘單詞必須是大寫字母。(camelCaps)

例如:getDate(),getElementById()

在物件導向中,成員變數的訪問需要使用set/get,這個設計模式有提到。

例如:private $_myz; public function setMyz(){}; public function getMyz(){};

5.變數

變數只能用以字母開頭的字母數字。

private和protected類型的變數必須以底線開頭,而且是單底線。

public類型的變數不能以底線開頭。

變數名必須是小寫字母開頭,如果是多個單片語成,其餘單詞必須是大寫字母。(camelCaps)

6.常量

常量要以大寫字母開頭,並且全部由大寫字母和底線組成。不帶$符號。

例如:PHP_SELF

常量應該在類中定義:const MYZ_SELF

編碼風格

1.<?php ?>

zf裡面不建議使用短標籤:<??>。我也不建議...

另外一點就是:結尾不寫?>,理由上面解釋過。

2.String

字串如果是純字元(不帶變數),那麼就用單引號。

$myz = 'MyZ is cowboy!';

在字串中需要使用引號的,那麼就用雙引號,裡面使用單引號,在SQL語句中用的很多。

$myz = "SELECT * FROM myFavorites WHERE name = 'frame' LIMIT 0,1";

字串中含有變數,使用雙引號。

$myz = "$name is cowboy!"; $myz = "{$name} is cowboy!";

這個是錯的:$myz = "${name} is cowboy!";(雖然這個在PHP中是正確的)。

字串相連

$zf = 'zend ' . 'framework';

如果需要換行就以下面的格式寫:

$zf = 'zend' 

. 'framework'

. 'is'

. 'good';

3.數組

數字索引,索引從0開始。

$myz = array(1,2,3,'myz','great',$a);

字串索引,索引名稱自行定義。

$myz = array ('zend' => '1.0.1',

'php' => '5.1.2',

'apache' => '2.2.4');

4.類

4.1.類的聲明

類後面的{}每半個大擴號,需要單獨佔一行。

每個類需要有符合PHPDocumentor標準的注釋。

類內所有的代碼都要先縮排4個字元。

一個PHP檔案內只能有一個類。

盡量一個PHP檔案不要寫其他的代碼,如果有的話,請空兩行。

例如:

require_once 'Zend/Pdf/Resource/Image/Jpeg.php';

/**

* Documentation Block Here

*/

class SampleClass

{

// entire content of class

// must be indented four spaces

}

4.2.類的成員變數

成員變數要先於函數,在類中定義。

不要使用var 這種方式定義變數,要使用private,protected,public,盡量不要把成員變數定義成public,而是使用set/get方式訪問。

5.函數和方法

5.1.函數和方法的聲明

類中的函數必須使用private,protected,public。

和類的格式相同,也需要大擴號單獨佔一行。

函數後面的()緊貼函數名。

/**

* Documentation Block Here

*/

class Foo

{

/**

    * Documentation Block Here

    */

public function bar()

{

       // entire content of function

       // must be indented four spaces

}

}

函數後面的參數也可以使用引用變數public function bar(&$bar),這個必須先定義成&才能用。

return($this->bar);//這個是錯誤的。要寫成:return $this->bar; 提高可讀性。

5.2.函數和方法的使用

函數參數中如果有多個,就要用逗號隔開,並且逗號後面要有空格。

bar($a, $b, $c);

6.控制語句

6.1.If/Else/Elseif

If,Else,Elseif 每個都要佔一行。

條件中,操作符前後要有空格,提高可讀性。

開始的大括弧和if同行,結束的大括弧另起一行。

例如:

if ($a != 2) {

$a = 2;

} elseif ($a == 3) {

$a = 4;

} else {

$a = 7;

}

盡量多的使用elseif而不是再寫一個if。

在某些時刻也可以不使用{}。例如只有一行。

6.2.Switch

和if相似,開始的大括弧和switch同行,結束的大括弧另起一行。

每一個case都要有4個空格縮排。

switch ($numPeople) {

case 1:

       break;

case 2:

       break;

default:

       break;

}

每個case需要有個break,如果想要出於某種特殊目的不寫break的,需要註明:// break intentionally omitted

7.注釋

7.1.所有的注釋都要符合phpdocumentor規範。http://phpdoc.org/

具體的規範,請參考zf檔案中的內容。

7.2.檔案注釋

每個檔案在開始都要有注釋,符合phpdocumentor標準的。

/**

* Short description for file

*

* Long description for file (if any)...

*

* LICENSE: Some license information

*

* @copyright 2005 Zend Technologies

* @license http://www.zend.com/license/3_0.txt PHP License 3.0

* @version CVS: $Id:$

* @link    http://dev.zend.com/package/PackageName

* @since    File available since Release 1.2.0

*/

7.3.類注釋

/**

* Short description for class

*

* Long description for class (if any)...

*

* @copyright 2005 Zend Technologies

* @license http://www.zend.com/license/3_0.txt PHP License 3.0

* @version Release: @package_version@

* @link    http://dev.zend.com/package/PackageName

* @since    Class available since Release 1.2.0

* @deprecated Class deprecated in Release 2.0.0

*/

7.4函數注釋

函數注釋需要註明:描述,全部的參數,傳回值。

如果拋出異常,則需要:@throws exceptionclass [description]

相關文章

聯繫我們

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