PHP老手語法規(guī)范

作者:燁竹

如果使用以下的代碼規(guī)范:更顯的你像一個(gè)老司機(jī)

[PHP 結(jié)束標(biāo)簽]

PHP 結(jié)束標(biāo)簽 ?> 對(duì)于 PHP 解析器來說是可選的,但是只要使用了,結(jié)束標(biāo)簽之后的空格 有可能會(huì)導(dǎo)致不想要的輸出,這個(gè)空格可能是由開發(fā)者或者用戶又或者 FTP 應(yīng)用程序引入的, 甚至可能導(dǎo)致出現(xiàn) PHP 錯(cuò)誤,如果配置了不顯示 PHP 錯(cuò)誤,就會(huì)出現(xiàn)空白頁面?;谶@個(gè)原因, 所有的 PHP 文件將不使用結(jié)束標(biāo)簽,而是以一個(gè)空行代替。

[文件的命名]

類文件的命名必須以大寫字母開頭,其他文件(配置文件,視圖,一般的腳本文件等)的命名是全小寫。
另外,類文件的名稱必須和類的名稱保持一致,例如,如果你有一個(gè)類名為 Myclass, 那么文件名應(yīng)該是 Myclass.php

Somelibrary.php
Some_library.php

applicationconfig.php
application_config.php

[類和方法的命名]

類名必須以大寫字母開頭,多個(gè)單詞之間使用下劃線分割,不要使用駝峰命名法。

class Super_class {

    public function __construct()
    {

    }
}

類的方法應(yīng)該使用全小寫,并且應(yīng)該明確指出該方法的功能,最好包含一個(gè)動(dòng)詞;避免使用冗長(zhǎng)的名稱,多個(gè)單詞之間使用下劃線分割

  function get_file_properties() 

[變量的命名]

變量的命名規(guī)則和類方法的命名規(guī)則非常接近,使用全小寫,使用下劃線分割, 并且應(yīng)該明確指出該變量的用途。非常短的無意義的變量只應(yīng)該在 for 循環(huán)中作為迭代器使用。

    for ($j = 0; $j < 10; $j++)
    $str
    $buffer
    $group_id
    $last_city

[注釋]

通常情況下,應(yīng)該多寫點(diǎn)注釋,這不僅可以向那些缺乏經(jīng)驗(yàn)的程序員描述代碼的流程和意圖, 而且當(dāng)你幾個(gè)月后再回過頭來看自己的代碼時(shí)仍能幫你很好的理解。 注釋并沒有強(qiáng)制規(guī)定的格式,但是我們建議以下的形式。

DocBlock 風(fēng)格的注釋,寫在類、方法和屬性定義的前面,可以被 IDE 識(shí)別:

    /**
     * Super Class
     *
     * @package Package Name
     * @subpackage  Subpackage
     * @category    Category
     * @author  Author Name
     * @link    http://example.com
     */
    class Super_class {

單行注釋應(yīng)該和代碼合在一起,大塊的注釋和代碼之間應(yīng)該留一個(gè)空行

// break up the string by newlines
$parts = explode("\n", $str);

// A longer comment that needs to give greater detail on what is
// occurring and why can use multiple single-line comments.  Try to
// keep the width reasonable, around 70 characters is the easiest to
// read.  Don't hesitate to link to permanent external resources
// that may provide greater detail:
//
// http://example.com/information_about_something/in_particular/

$parts = $this->foo($parts);

[常量]

常量遵循和變量一樣的命名規(guī)則,除了它需要全部大寫。**盡量使用 CodeIgniter 已經(jīng)定義好的常量, 如:SLASH、LD、RD、PATH_CACHE 等。

MY_CONSTANT
NEWLINE
SUPER_CLASS_VERSION
$str = str_replace(LD.'foo'.RD, 'bar', $str);

[TRUE、FALSE 和 NULL]

TRUE 、 FALSENULL 這幾個(gè)關(guān)鍵字全部使用大寫

if ($foo == TRUE)
$bar = FALSE;
function foo($bar = NULL)

[邏輯操作符]

不要使用 || 操作符,它在一些設(shè)備上看不清(可能看起來像是數(shù)字 11), 使用 && 操作符比使用 AND 要好一點(diǎn),但是兩者都可以接受。 另外,在 ! 操作符的前后都應(yīng)該加一個(gè)空格

if ($foo OR $bar)
if ($foo && $bar) // recommended
if ( ! $foo)
if ( ! is_array($foo))

[對(duì)返回值進(jìn)行比較以及類型轉(zhuǎn)換]

有一些 PHP 函數(shù)在失敗時(shí)返回 FALSE ,但是也可能會(huì)返回 "" 或 0 這樣的有效值, 這些值在松散類型比較時(shí)和 FALSE 是相等的。所以當(dāng)你在條件中使用這些返回值作比較時(shí), 一定要使用嚴(yán)格類型比較,確保返回值確實(shí)是你想要的,而不是松散類型的其他值。
在檢查你自己的返回值和變量時(shí)也要遵循這種嚴(yán)格的方式,必要時(shí)使用 ===!==

function build_string($str = "")
{
    if ($str === "")
    {

    }
}

另外關(guān)于 類型轉(zhuǎn)換 的信息也將很有用。 類型轉(zhuǎn)換會(huì)對(duì)變量產(chǎn)生一點(diǎn)輕微的影響,但可能也是期望的。例如 NULL 和 布爾值 FALSE 會(huì)轉(zhuǎn)換為空字符串, 數(shù)字 0 (和其他數(shù)字)將會(huì)轉(zhuǎn)換為數(shù)字字符串,布爾值 TRUE 會(huì)變成 "1":

$str = (string) $str;

[調(diào)試代碼]

不要在你的提交中包含調(diào)試代碼,就算是注釋掉了也不行。 像 var_dump() 、 print_r() 、 die() 和 exit() 這樣的函數(shù),都不應(yīng)該包含在你的代碼里, 除非它們用于除調(diào)試之外的其他特殊用途。

[文件中的空格]

PHP 起始標(biāo)簽的前面和結(jié)束標(biāo)簽的后面都不要留空格,輸出是被緩存的,所以如果你的文件中有空格的話, 這些空格會(huì)在輸出它的內(nèi)容之前被輸出,從而會(huì)導(dǎo)致錯(cuò)誤,而且也會(huì)導(dǎo)致無法發(fā)送正確的頭信息。

[空格]

在代碼中使用制表符(tab)來代替空格,這雖然看起來是一件小事,但是使用制表符代替空格, 可以讓開發(fā)者閱讀你代碼的時(shí)候,可以根據(jù)他們的喜好在他們的程序中自定義縮進(jìn)。 此外還有一個(gè)好處是,這樣文件可以更緊湊一點(diǎn),也就是本來是四個(gè)空格字符, 現(xiàn)在只要一個(gè)制表符就可以了。

[換行]

文件必須使用 Unix 的換行格式保存。這對(duì)于那些在 Windows 環(huán)境下的開發(fā)者可能是個(gè)問題, 但是不管在什么環(huán)境下,你都應(yīng)該確認(rèn)下你的文本編輯器已經(jīng)配置好使用 Unix 換行符了。

[代碼縮進(jìn)]

使用 Allman 代碼縮進(jìn)風(fēng)格。除了類的定義之外,其他的所有大括號(hào)都應(yīng)該獨(dú)占一行, 并且和它對(duì)應(yīng)的控制語句保持相同的縮進(jìn)。

function foo($bar)
{
// ...
}

[中括號(hào)和小括號(hào)內(nèi)的空格]

一般情況下,使用中括號(hào)和小括號(hào)的時(shí)候不應(yīng)該使用多余的空格。 唯一的例外是,在那些接受一個(gè)括號(hào)和參數(shù)的 PHP 的控制結(jié)構(gòu)(declare、do-while、elseif、for、 foreach、if、switch、while)的后面應(yīng)該加一個(gè)空格,這樣做可以和函數(shù)區(qū)分開來,并增加可讀性。

[短標(biāo)記]

使用 PHP 的完整標(biāo)記,防止服務(wù)器不支持短標(biāo)記( short_open_tag )參數(shù)。

<?php echo $foo; ?>

[字符串]

字符串使用單引號(hào)引起來,當(dāng)字符串中有變量時(shí)使用雙引號(hào),并且使用大括號(hào)將變量包起來。 另外,當(dāng)字符串中有單引號(hào)時(shí),也應(yīng)該使用雙引號(hào),這樣就不用使用轉(zhuǎn)義符。

'My String'
"My string {$foo}"
"SELECT foo FROM bar WHERE baz = 'bag'"

[每行只有一條語句]

  $foo = 'this';
  $bar = 'that';
  $bat = str_replace($foo, $bar, $bag);

[SQL 查詢]

SQL 關(guān)鍵字永遠(yuǎn)使用大寫:SELECT、INSERT、UPDATE、WHERE、AS、JOIN、ON、IN 等。

考慮到易讀性,把長(zhǎng)的查詢分成多行,最好是每行只有一個(gè)從句或子從句。

    $query = $this->db->query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz
            FROM exp_pre_email_addresses
            WHERE foo != 'oof'
            AND baz != 'zab'
            ORDER BY foobaz
            LIMIT 5, 100");

[缺省的函數(shù)參數(shù)]

適當(dāng)?shù)臅r(shí)候,提供函數(shù)參數(shù)的缺省值,這有助于防止因錯(cuò)誤的函數(shù)調(diào)用引起的PHP錯(cuò)誤, 另外提供常見的備選值可以節(jié)省幾行代碼。例如:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,536評(píng)論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,535評(píng)論 19 139
  • 1.認(rèn)識(shí)php php是服務(wù)端嵌入到HTML中的腳本語言。php的功能包括但不限于: 收集表單數(shù)據(jù) 生成動(dòng)態(tài)網(wǎng)頁 ...
    楠哥哥_0b86閱讀 937評(píng)論 3 1
  • .bat腳本基本命令語法 目錄 批處理的常見命令(未列舉的命令還比較多,請(qǐng)查閱幫助信息) 1、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,531評(píng)論 1 19
  • 在沒有接手三年級(jí)學(xué)生的時(shí)候,總覺得那些乳臭未干的孩子們會(huì)很害怕老師,會(huì)唯老師的話是從,老師的話便是圣旨。對(duì)于他們來...
    伊若閱讀 675評(píng)論 0 3

友情鏈接更多精彩內(nèi)容