国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

PHP 編碼規(guī)范

2024-05-04 23:00:09
字體:
供稿:網(wǎng)友


縮進

縮進使用4個空格,而不是 tab。如果你使用 emacs 編輯 pear 代碼,你應(yīng)該設(shè)置 indent-tabs-mode 為 nil。下面是一個 mode hook 的示例,用于設(shè)置 emacs 符合縮進標準(你必須確保在編輯 php 文件時,這些設(shè)置發(fā)生作用):

  (defun php-mode-hook ()
  (setq tab-width 4
        c-basic-offset 4
        c-hanging-comment-ender-p nil
        indent-tabs-mode
        (not
         (and (string-match "http:///(pear//|pear//)/" (buffer-file-name))
              (string-match "/.php$" (buffer-file-name))))))

這里是同等效果的 vim 規(guī)則:

  set expandtab
  set shiftwidth=4
  set softtabstop=4
  set tabstop=4


--------------------------------------------------------------------------------


控制結(jié)構(gòu)

控制結(jié)構(gòu)包含 if、for、while、switch 等。這里有一個 if 語句的示例和一個 switch 語句的示例:

if 語句的示例:

<?php
if ((condition1) || (condition2)) {
    action1;
} elseif ((condition3) && (condition4)) {
    action2;
} else {
    defaultaction;
}
?>

switch 語句的示例:

<?php
switch (condition) {
case 1:
    action1;
    break;
case 2:
    action2;
    break;
default:
    defaultaction;
    break;
}
?>

控制語句應(yīng)該在控制關(guān)鍵詞和開始的圓括號之間應(yīng)該有一個空格,以此和函數(shù)調(diào)用進行區(qū)別。

強烈建議你總是使用花括號將控制結(jié)構(gòu)各部分標識出來。即使是在技術(shù)上可以不使用花括號的地方。這可以增加代碼的可讀性,同時避免在結(jié)構(gòu)部分增加新行后引入邏輯上的錯誤。

原始代碼:

if (condition)
    return true;
else
    return false;

修改后的代碼:

if (condition)
    do something; // 出現(xiàn)邏輯錯誤
    return true;
else
    return false;

正確的做法:

if (condition) {
    do something;
    return true;
} else {
    return false;
}


--------------------------------------------------------------------------------


函數(shù)調(diào)用

調(diào)用函數(shù)時,函數(shù)名和開始的括號之間不應(yīng)該有空白字符。參數(shù)和開始及結(jié)束的括號之間不應(yīng)有空格。而除第一個參數(shù)外,其他參數(shù)都應(yīng)該用一個空格分隔。這里有一個示例:

<?php
$var = foo($bar, $baz, $quux);
?>

像上面的示例代碼,賦值運算等號兩邊都應(yīng)該使用一個空格。如果是相關(guān)的賦值運算,應(yīng)該采用下面的形式以提供更好的可讀性:

<?php
$short = foo($bar);
$long_variable = foo($baz);
?>


--------------------------------------------------------------------------------


函數(shù)定義

按照“one true brace”約定聲明函數(shù):

<?php
function foofunction($arg1, $arg2 = '')
{
    if (condition) {
        statement;
    }
    return $val;
}
?>

“one true brace”約定就是開始的花括號單獨占一行,而不是跟在其他語句后面。

具有默認值的參數(shù)應(yīng)該位于參數(shù)列表的后面(事實上 php 語言定義也要求如此)。如果適合,函數(shù)應(yīng)該總是返回一個有意義的值。這里有一個稍微長一點的示例:

<?php
function connect(&$dsn, $persistent = false)
{
    if (is_array($dsn)) {
        $dsninfo = &$dsn;
    } else {
        $dsninfo = db::parsedsn($dsn);
    }

    if (!$dsninfo || !$dsninfo['phptype']) {
        return $this->raiseerror();
    }
    return true;
}
?>


--------------------------------------------------------------------------------


注釋

類型(class)的聯(lián)機文檔應(yīng)該符合 phpdoc(類似于 javadoc)的約定。更多關(guān)于 phpdoc 的信息可以訪問 http://www.phpdoc.de/ 獲得。

此外,強烈鼓勵使用非文檔注釋。一般性規(guī)則是對于那些容易忘記作用的代碼添加簡短的介紹性注釋。

推薦使用 c 樣式的注釋(/* */)和標準 c++ 注釋(//),而不應(yīng)該使用 perl/shell 樣式的注釋(#)。


--------------------------------------------------------------------------------


包含代碼

無論在什么地方無條件包含一個類型文件,應(yīng)該使用 require_once()。如果有條件的包含一個類型文件(例如使用工廠方法),應(yīng)該使用 include_once()。使用兩者中的任何一個都能夠確保類型文件只包含一次。它們共享一個文件列表,因此你不需要擔(dān)心混淆他們 —— 一個文件使用 require_once() 包含后不會在 include_once() 中再一次被包含。

備注:include_once() 和 require_once() 是一個聲明,而不是函數(shù)。你不需要使用圓括號將文件名擴起來(不過使用括號也不會出現(xiàn)錯誤)。


--------------------------------------------------------------------------------


php 代碼標記

總是使用 <?php ?> 來界定 php 代碼,而不要使用 <? ?> 速記方式。這是為了符合 pear 一致性所必須的,同時也是在不同操作系統(tǒng)和不同安裝設(shè)置環(huán)境下移植 php 代碼所要求的。


--------------------------------------------------------------------------------


頭注釋塊

pear 發(fā)布的所有源代碼文件頭部都應(yīng)該包含下面的注釋塊:

<?php
/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// | php version 4                                                        |
// +----------------------------------------------------------------------+
// | copyright (c) 1997-2002 the php group                                |
// +----------------------------------------------------------------------+
// | this source file is subject to version 2.0 of the php license,       |
// | that is bundled with this package in the file license, and is        |
// | available at through the world-wide-web at                           |
// | http://www.php.net/license/2_02.txt.                                 |
// | if you did not receive a copy of the php license and are unable to   |
// | obtain it through the world-wide-web, please send a note to          |
// | [email protected] so we can mail you a copy immediately.               |
// +----------------------------------------------------------------------+
// | authors: original author <[email protected]>                        |
// | your name <[email protected]>                                          |
// +----------------------------------------------------------------------+
//
// $ id $
?>

這里沒有硬性規(guī)定要將一個代碼貢獻者的名字添加到文件注釋的作者列表中。一般情況下,他們的更改屬于“substantial”目錄(意味大約10%到20%的代碼被改寫)。有一個例外就是代碼貢獻者重寫了函數(shù)或者貢獻了新的程序邏輯。

簡單的代碼重組和 bug 修復(fù)不應(yīng)該增加新作者,這是不恰當(dāng)?shù)摹?/p>

不在核心 pear 倉庫中的文件應(yīng)該有一個類似的注釋塊來說明版權(quán)、許可協(xié)議和作者。所有文件應(yīng)該包含一個模式行(modeline,用于 vim 和 emacs)以確保一致性。


--------------------------------------------------------------------------------


使用 cvs

這個小節(jié)的內(nèi)容僅僅適用于 cvs.php.net 上使用 cvs 的包。

在每一個文件中包含 $id $(兩個 $ 符號之間的關(guān)鍵字不能夠有空格,但由于此文檔也是用 cvs 管理,因此只好加個空格,避免被 cvs 替換掉) cvs 關(guān)鍵字,以便查看文件當(dāng)前狀態(tài)和最后修改時間等信息。如果已經(jīng)存在“l(fā)ast modified:”這樣的信息,則替換為 $id $ 標記。

這個小節(jié)的其他內(nèi)容假定你有關(guān)于 cvs 標記和分支(branches)的基本知識。

cvs 標記用于標識你包中的文件釋放之前所作的修訂。下面的列表是必需使用和建議使用的 cvs 標記:

release_n_n

(必需的)用于標記一個釋放版本。如果你沒有使用這個標記,別人就沒有辦法在你發(fā)布一個釋放版本時從 cvs 服務(wù)器獲取你的包。

qa_n_n

(分支,可選)如果你覺得在發(fā)布釋放版本之前要提供一個候選釋放版本,那么一個好主意就是增加一個分支。這個分支可以讓你將釋放版本隔離出來,并在正式發(fā)布釋放版本之前可以為這些分支單獨應(yīng)用更新。期間,正常的開發(fā)工作可以在主干上繼續(xù)進行。

maint_n_n

(分支,可選)如果你需要創(chuàng)建一個較小修改的釋放版本(例如在 1.2 之后發(fā)布 1.2.1)。那么你可以創(chuàng)建一個分支來達到目的。

僅有 release 標記是必須的,其他標記為了方便推薦你使用。

下面是一個如何為 "money_fast" 包 1.2 釋放版本增加標記的示例:

$ cd pear/money_fast
$ cvs tag release_1_2
t fast.php
t readme
t package.xml

經(jīng)過上面的操作,就可以在 pear web 網(wǎng)站上獲取你的一系列釋放版本了。

這里是一個如何建立 qa 分支的示例:

$ cvs tag qa_2_0_bp
...
$ cvs rtag -b -r qa_2_0_bp qa_2_0
$ cvs update -r qa_2_0
$ cvs tag release_2_0rc1
...and then the actual release, from the same branch:
$ cvs tag release_2_0

"qa_2_0_bp" 標記是一個 "branch point" 標記,用于標記分支的開始。總是用這樣的標記來標明分支的開始是一個好主意。maint 分支可以使用 release 標記作為它的分支起點。


--------------------------------------------------------------------------------


示例中的 url

所有示例中用到的 url 地址都應(yīng)該是 "example.com"、"example.org"、"example.net"。


--------------------------------------------------------------------------------


命名約定

一般而言,class、函數(shù)和變量的名字應(yīng)該總是能夠描述讓代碼閱讀者能夠容易的知道這些代碼的作用。

classes

class 應(yīng)該具有一個描述性的名字。可能時應(yīng)該避免使用縮寫。class 名字應(yīng)該總是用一個大寫字母開始。從 class 名字中也能夠反映出 pear class 的層次。層次中的每個級別都用下劃線進行分隔。好的 class 名字示例如下:

log
net_finger
html_upload_error

函數(shù)和方法

函數(shù)和方法應(yīng)該使用 "studly caps" 樣式命名。函數(shù)應(yīng)該將所在包的名字作為前綴,以避免與其他包的函數(shù)發(fā)生名字沖突。名字的受字母(前綴之后)應(yīng)該是小寫,每一個新單詞應(yīng)該以大寫字母開頭。下面是一些示例:

connect()
getdata()
buildsomewidget()
xml_rpc_serializedata()

私有 class 成員和屬性(意味著 class 成員和屬性只應(yīng)該由同一個 class 中聲明的成員使用。不過 php 并不支持強制性的私有命名空間)應(yīng)該用一個下劃線開頭。示例:

_sort()
_inittree()
$this->_status

常數(shù)

常數(shù)應(yīng)該總是全部使用大寫字母命名,用下劃線來分隔單詞。常數(shù)名字的前綴應(yīng)該使用大寫的 class/包 名字。例如:db:: 包使用的所有常數(shù)都已 db_ 開頭。

全局變量

如果你的包需要定義全局變量,那么應(yīng)該用下劃線跟上包的名字和另一個下劃線作為開頭。例如,pear 包使用一個全局變量名為 $_pear_destructor_object_list。

預(yù)定義的值 true、false 和 null

php 的內(nèi)建值 true、false 和 null 必須全部用小寫字母書寫。

 

  • 本文來源于網(wǎng)頁設(shè)計愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。
  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 西和县| 建瓯市| 汪清县| 尚义县| 墨竹工卡县| 金阳县| 祁连县| 德安县| 时尚| 富阳市| 阿拉尔市| 南平市| 来安县| 清新县| 淳化县| 菏泽市| 崇明县| 石楼县| 阿拉尔市| 锦屏县| 岱山县| 同仁县| 淳安县| 达州市| 渭南市| 富民县| 长顺县| 墨竹工卡县| 上饶县| 同心县| 兰溪市| 盘山县| 秦皇岛市| 河间市| 广安市| 南开区| 四川省| 都兰县| 呼图壁县| 静海县| 石楼县|