多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > codeigniter > [PHP]CodeIgniter學習手冊(四):簡單的PHP開發規范

[PHP]CodeIgniter學習手冊(四):簡單的PHP開發規范

來源:程序員人生   發布時間:2013-10-11 04:54:39 閱讀次數:3833次
文件格式
文件應該使用 Unicode (UTF-8) 編碼保存。同時不要使用 字節序標記(BOM) 。與 UTF-16 和 UTF-32 不同,UTF-8 編碼的文件不需要指明字節序,而且 字節序標記(BOM) 在PHP中會產生預期之外的輸出,阻止了應用程序設置它自己的頭信息。應該使用Unix 格式的行結束符(LF)。

PHP 閉合標簽
PHP閉合標簽“?>”在PHP中對PHP的分析器是可選的。 但是,如果使用閉合標簽,任何由開發者,用戶,或者FTP應用程序插入閉合標簽后面的空格都有可能會引起多余的輸出、php錯誤、之后的輸出無法顯示、空白頁。因此,所有的php文件應該省略這個php閉合標簽,并插入一段注釋來標明這是文件的底部并定位這個文件在這個應用的相對路徑。這樣有利于你確定這個文件已經結束而不是被刪節的。

不當的:

<?php
echo "Here's my code!";
?>

適當的:

<?php
echo "Here's my code!";
/* End of file myfile.php */
/* Location: ./system/modules/mymodule/myfile.php */


類和方法(函數)的命名規則

類名的首字母應該大寫。如果名稱由多個詞組成,詞之間要用下劃線分隔,不要使用駱駝命名法。類中所有其他方法的名稱應該完全小寫并且名稱能明確指明這個函數的用途,最好用動詞開頭。盡量避免過長和冗余的名稱

不當的:

class superclass

class SuperClass

適當的:

class Super_class


不當的和適當的方法名稱的示例:

不當的:

function fileproperties() // 方法名沒有清晰的描述以及下劃線分割單詞

function fileProperties() // 方法名沒有清晰的描述以及使用了駝峰法命名

function getfileproperties() // 還可以!但是忘記了下劃線分割單詞

function getFileProperties() // 使用了駝峰法命名

function get_the_file_properties_from_the_file() // 方法名太冗長

適當的:

function get_file_properties() // 清晰的方法名描述,下劃線分割單詞,全部使用小寫字母


變量命名
變量的命名規則與方法的命名規則十分相似。就是說,變量名應該只包含小寫字母,用下劃線分隔,并且能適當地指明變量的用途和內容。那些短的、無意義的變量名應該只作為迭代器用在for()循環里。

不當的:

$j = 'foo'; // 單字符變量應該只作為for()的循環變量使用

$Str // 使用了大寫字母

$bufferedText // 使用了駝峰命名,而且變量名應該更短,并有清晰的語法含義

$groupid // 多個詞組,應該使用下劃線分割

$name_of_last_city_used // 太長了

適當的:

for ($j = 0; $j < 10; $j++)

$str $buffer $group_id $last_city


注釋

通常,代碼應該被詳細地注釋。這不僅僅有助于給缺乏經驗的程序員描述代碼的流程和意圖,而且有助于給你提供豐富的內容以讓你在幾個月后再看自己的代碼時仍能很好的理解。 注釋沒有強制規定的格式,但是我們建議以下的形式。

文檔塊(DocBlock) 式的注釋要寫在類和方法的聲明前,這樣它們就能被集成開發環境(IDE)捕獲:
/**
 * Super Class
 * @package Package Name
 * @subpackage Subpackage
 * @category Category
 * @author Author Name
 * @link http://example.com
 */

使用行注釋時,在大的注釋塊和代碼間留一個空行。


常量
常量命名除了要全部用大寫外,其他的規則都和變量相同。在適當的時候,始終使用CodeIgniter常量,例如LASH, LD, RD, PATH_CACHE等等.

不當的:

myConstant // 未使用下劃線分割單詞,未全部使用大寫字母

N // 不能使用單個字母作為常量

S_C_VER // 常量名沒有清晰的含義

$str = str_replace('{foo}', 'bar', $str); // should use LD and RD constants

恰當的:

MY_CONSTANT

NEWLINE SUPER_CLASS_VERSION

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



TRUE, FALSE, 和 NULL
TRUE, FALSE, 和 NULL 關鍵字應該總是完全大寫的。

不當的:

if ($foo == true) $bar = false;

function foo($bar = null)

恰當的:

if ($foo == TRUE)

$bar = FALSE;

function foo($bar = NULL)



邏輯操作符
|| 有時讓人底氣不足,不容易辨識,因為在某些輸出設備上它不夠清晰(可能看起來像數字11). && 要優先于 AND ,不過兩者都可以被接受, 使用 ! 時要在其前后都加一個空格。

不當的:

if ($foo || $bar)

if ($foo AND $bar) // 可以,但有時不被常用的語法程序高亮標識)

if (!$foo)

if (! is_array($foo))

恰當的:

if ($foo OR $bar)

if ($foo && $bar) // 推薦 if ( ! $foo) if ( ! is_array($foo))


比較返回值與類型映射
部分PHP函數執行失敗時返回 FALSE, 但也可能有一個有效的返回值 "" 或 0, 它在松散比較中會被計算為FALSE. 在條件語句中使用這些返回值的時候,為了確保返回值是你所預期的類型而不是一個有著松散類型的值,請進行顯式的比較。

在返回和檢查你自己的變量時也要遵循這種嚴格的方法,必要時使用=== 和 !==。

不當的:

// 如果 'foo' 位于此字符串的起始處,strpos將返回 0,

// 此處條件判斷的結果為TRUE

if (strpos($str, 'foo') == FALSE)

恰當的:

if (strpos($str, 'foo') === FALSE)

不當的:

function build_string($str = "") {

if ($str == "") // uh-oh! 如果傳遞的參數是FALSE或者整數0那會怎么樣? { }

}

恰當的:

function build_string($str = "") {

if ($str === "") { }

}



文件中的空格(CodeIgniter中)
在PHP開始標記之前和結束標記之后都不能有空格。輸出已經被緩存,所以文件中的空格會導致CodeIgniter在輸出自己的內容之前就開始了輸出,這會使CodeIgniter出錯且無法輸出正確的header。在下面的例子中,使用鼠標選中這些文本,你就能看到那些不應該有的空格。
不當的:
     <?php // ...在PHP開始標記上面有空格和換行符并且在PHP結束標記后面也有空格 ?>    

恰當的:

<?php // 本例中,PHP開始標記之前和結束標記之后就沒有空格 ?>


兼容性

除非你的附加組件的文檔中有特別說明,否則所有代碼必須與PHP 5.1以上版本兼容。此外,不要使用那些依賴于非默認安裝的庫的函數,除非你的代碼中包含了該函數不可用時的替代方法,或者你在文檔中明確說明了你的附加組件需要某些庫。


使用常見詞語來命名類和文件
當你的類或文件名是一個常見詞語時,或者是很可能與另一個PHP腳本同名時,使用一個唯一的前綴來避免沖突。你必須始終明白這一點:你的最終用戶可能會運行其它第三方的附加組件或者PHP腳本。選擇一個能夠唯一標識開發者或公司的前綴。

不當的:

class Email pi.email.php

class Xml ext.xml.php

class Import mod.import.php

恰當的:

class Pre_email pi.pre_email.php

class Pre_xml ext.pre_xml.php

class Pre_import mod.pre_import.php


數據庫表名
你的附加組件所用到的任何表都必須使用 'exp_' 這個前綴,然后是一個能夠唯一標識開發者或公司的前綴,最后才是一個簡短的描述性的表名。你不需要擔心用戶安裝時所使用的數據庫前綴,因為CodeIgniter的數據庫類將根據實際情況自動地對 'exp_' 進行轉換。

不當的:

email_addresses // 缺少這兩個前綴

pre_email_addresses // 缺少 exp_ 前綴

exp_email_addresses // 缺少唯一前綴

恰當的:

exp_pre_email_addresses


說明: 請注意MySQL對表名的限制是不能多于64個字符。會超出這個限制的那些表名都是不合理的,因此這應該不是問題。例如,下面的這個些表名比最大限制多出一個字符。這很傻,不是嗎? exp_pre_email_addresses_of_registered_users_in_seattle_washington


一個文件一個類

對于你的附加組件所使用的類應當遵循一個文件一個類的原則,除非這些類是緊密相關的。CodeIgniter的文件中包含多個類的一個例子是數據庫類文件,其中包含了DB類和DB_Cache類,還有Magpie插件,其中包含了Magpie和Snoopy類。


空格

在代碼中使用tab代替空格。這雖然看起來像是小事,但是使用tab代替空格有利于那些閱讀你的代碼的開發者在他們各自所使用的應用程序中自定義縮進方式。此外還有一個好處是,使用這種方式保存的文件稍微緊湊一點。


換行

文件必須使用Unix換行符保存。這對于那些在Windows下的開發者來說更為重要,但無論如何,確保你的文本編輯器已經設置為使用Unix換行符來保存文件。


代碼縮進
使用 Allman 風格縮進。除了類聲明以外,括號總是獨占一行,且縮進與“屬于”它的控制語句同級。

不恰當的:

function foo($bar) {

// ...

}

foreach ($arr as $key => $val) {

// ...

}

if ($foo == $bar) {

// ...

} else {

// ...

}

恰當的:

function foo($bar)

{

// ...

}

foreach ($arr as $key => $val)

{

// ...

}

if ($foo == $bar) {

// ...

}

else

{ // ...

}



方括號及圓括號內的空格符
通常情況下,不要在方括號"[]"和圓括號"()"內增加任何空格符。唯一的例外就是為了提高可讀性和區別開它們與函數,在接受參數的PHP語法控制結構所使用的括號里,需要增加空格符(declare, do-while, elseif, for, foreach, if, switch, while)。

不恰當的:

$arr[ $foo ] = 'foo';

正確的:

$arr[$foo] = 'foo'; // 數組鍵值的方括號內沒有空格

不恰當的:

function foo ( $bar ) { }

正確的:

function foo($bar) // 函數聲明的圓括號內沒有空格 { }

不恰當的:

foreach( $query->result() as $row ) // PHP語法控制結構之后有空格,但不是在圓括號內

正確的: foreach ($query->result() as $row)


本地化文本
所有在控制面板輸出的文本都應該使用 lang 文件里的語言變量來允許本地化。

不正確:

return "Invalid Selection";

正確的:

return $this->lang->line('invalid_selection');


私有方法和變量
代碼里像一些只是為了被類里其他公開函數所調用而封裝的工具/輔助類方法,應該以一個下劃線做前綴來命名。

convert_text() // 公開方法

_convert_text() // 私有方法



短標記
一直使用 PHP 完整標記,以免服務器不支持短標記,也就是未打開 short_open_tag 。(這條已經不成立,因為新版本的 CI 已經解決了服務器不支持短標記的問題,不過還是建議使用完整標記)

不正確的:

<? echo $foo; ?>

<?=$foo?>

正確的: <?php echo $foo; ?>


每行一條語句
切記不要在一行寫多條語句

不正確:

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

正確:

$foo = 'this';

$bar = 'that';

$bat = str_replace($foo, $bar, $bag);


字符串

一直使用單引號除非你需要解析變量,如果需要解析變量請使用大括號

如果字符串包含單引號的話你可以使用雙引號,這樣就不用轉義了。

不正確:

"My String" // 沒有解析變量,不需要使用雙引號

"My string $foo" // 解析變量需要使用括號

'SELECT foo FROM bar WHERE baz = 'bag'' // 需要轉義單引號''時這樣寫比較難看,可以使用雙引號

正確:

'My String'

"My string {$foo}"

"SELECT foo FROM bar WHERE baz = 'bag'"

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品久久久久久亚洲小说 | 亚洲视频 欧美视频 | 亚洲欧美国产精品 | 福利一区国产 | aa大片| 午夜理伦三级理论三级60 | h视频在线网站 | 国产成人一区二区 | 亚洲欧美韩国日本 | 伊人黄| 欲色综合 | 国产成人综合日韩精品无 | 伊人色在线观看 | 亚洲小说专区 | 男女免费观看在线爽爽爽视频 | 欧美性猛交xxxx乱大交中文 | 国产免费叼嘿视频 | 亚洲精品在线播放 | 日本久久综合视频 | 爽一爽色视频 | 日本www高清免费视频观看 | 国产精品视频一区二区三区w | 成人国产亚洲欧美成人综合网 | 国内精品视频成人一区二区 | 国产视频一区二区在线观看 | 中国人黑人xxⅹ性猛 | www.日韩精品 | 国产一区二区日韩欧美在线 | 中文一区在线 | 免费a在线看| 欧美激情一级欧美精品 | 成人午夜在线观看 | 精品国产高清不卡毛片 | 伊人网视频在线 | 国产欧美另类 | 日本黄色网址大全 | 女人18毛片a级毛片免费视频 | 日本xxx护士| 欧美性狂丰满性猛交 | 亚洲欧美日韩精品永久在线 | 欧美精品日韩 |