不當的:
<?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() // 清晰的方法名描述,下劃線分割單詞,全部使用小寫字母
不當的:
$j = 'foo'; // 單字符變量應該只作為for()的循環變量使用
$Str // 使用了大寫字母
$bufferedText // 使用了駝峰命名,而且變量名應該更短,并有清晰的語法含義
$groupid // 多個詞組,應該使用下劃線分割
$name_of_last_city_used // 太長了
適當的:
for ($j = 0; $j < 10; $j++)
$str $buffer $group_id $last_city
使用行注釋時,在大的注釋塊和代碼間留一個空行。
不當的:
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);
不當的:
if ($foo == true) $bar = false;
function foo($bar = null)
恰當的:
if ($foo == TRUE)
$bar = FALSE;
function foo($bar = NULL)
不當的:
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))
不當的:
// 如果 '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 === "") { }
}
<?php // 本例中,PHP開始標記之前和結束標記之后就沒有空格 ?>
除非你的附加組件的文檔中有特別說明,否則所有代碼必須與PHP 5.1以上版本兼容。此外,不要使用那些依賴于非默認安裝的庫的函數,除非你的代碼中包含了該函數不可用時的替代方法,或者你在文檔中明確說明了你的附加組件需要某些庫。
不當的:
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
不當的:
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換行符來保存文件。
不恰當的:
function foo($bar) {
// ...
}
foreach ($arr as $key => $val) {
// ...
}
if ($foo == $bar) {
// ...
} else {
// ...
}
恰當的:
function foo($bar)
{
// ...
}
foreach ($arr as $key => $val)
{
// ...
}
if ($foo == $bar) {
// ...
}
else
{ // ...
}
不恰當的:
$arr[ $foo ] = 'foo';
正確的:
$arr[$foo] = 'foo'; // 數組鍵值的方括號內沒有空格
不恰當的:
function foo ( $bar ) { }
正確的:
function foo($bar) // 函數聲明的圓括號內沒有空格 { }
不恰當的:
foreach( $query->result() as $row ) // PHP語法控制結構之后有空格,但不是在圓括號內
正確的: foreach ($query->result() as $row)
不正確:
return "Invalid Selection";
正確的:
return $this->lang->line('invalid_selection');
convert_text() // 公開方法
_convert_text() // 私有方法
不正確的:
<? 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'"