原文 : http://kbs.kimbs.cn/blog/list/post/22/title/zend-framework-coding-standards-for-php-file-formatting
Zend Framework 中的 Php 編碼通訊協定 (一) - 檔案格式
1. 對於只含有 php 代碼的檔案,我們將在檔案結尾處忽略掉 "?>" 。這是為了防止多餘的空格或者其它字元影響到代碼。
實際上這個問題只有當你不開啟壓縮或緩衝輸出時才會出現 :
// php.ini - 禁止壓縮輸出及緩衝輸出
zlib.output_compression = off
output_buffering = off
// foo.php - 注意這個時候有一些空格或分行符號掉在了 "?>" 之後,當然這在頁面上是看不到的
<?
php
$foo
=
'foo'
;
?>
複製代碼
// index.php - 在包含 foo.php 的同時,實際上我們已經輸出了一些空格或換行了
<?php
include
'foo.php'
;
session_start
();
?>
複製代碼
這時我們將看到一個警告 (warning) 說 "... Cannot send session cache limiter - headers already sent ..." 這是因為我們在 session_start() 之前輸出了一些看不到的字元。
2. 由 __halt_compiler() 允許的任意的二進位代碼的內容,被 Zend Framework 中的 PHP 檔案或由它們產生的檔案所禁止。
實際上這個規定是為了防止一些極個別的情況發生,例如上例中 :
// foo.php - 我們已經禁用了 "?>"
<?php
// 假如我們想通過 __halt_compiler() 輸出某些東西
if (
defined
(
'__COMPILER_HALT_OFFSET__'
)) {
$fp
=
fopen
(
__FILE__
,
'r'
);
fseek
(
$fp
,
__COMPILER_HALT_OFFSET__
);
var_dump
(
stream_get_contents
(
$fp
));
}
// 在程式結束時
__halt_compiler();
複製代碼
則在執行 index.php 時我們依然會看到警告,而只要把 __halt_compiler() 注釋掉就不會報錯了。需要注意的是 __halt_compiler() 實際上時語言結構,而非函數或方法。
3. 縮排由四個空格組成,禁止使用定位字元 TAB 。
這個主要是為了代碼美觀整齊。因為在不同的編輯器裡, TAB 定位字元的長度是不一樣的,而空格則是一樣的。實際上這已經成為編寫代碼的預設標準之一。
例如 :
if (
$x
==
1
) {
$indented_code
=
1
;
if (
$new_line
==
1
) {
$more_indented_code
=
1
;
}
}
複製代碼
4. 變數賦值必須保持相等間距和排列。
例如 :
$variable1 =
"demo"
;
$var2
=
"demo2"
;
複製代碼
5. 每行代碼長度應控制在80個字元以內,最長不超過120個字元。
因為 linux 讀入檔案一般以80列為單位,就是說如果一行代碼超過80個字元,那麼系統將為此付出額外操作指令。這個雖然看起來是小問題,但是對於追求完美的程式員來說也是值得注意並遵守的規範。
例如,下面是在 Zend/Navigation.php 中的一段代碼 :
6. 每行結尾不允許有多餘的空格。
這在很多 IDE 或者編輯器裡都是可以設定的,例如在 save 儲存操作執行時,順便去掉多餘的空格。
7. 行結束標誌遵循 Unix 文字檔的約定,行必需以單個分行符號 "/n" (LF) 結束。分行符號在檔案中表示為10,或16進位的 0x0A 。 不要使用蘋果作業系統的斷行符號 "/r" (0x0D) 或 Windows 系統的斷行符號換行組合如 "/r/n" (0x0D,0x0A) 。
這個規定沒有貶低蘋果機或者 Windows 的意思,而事實確實是,LAMP 還是主流,所以遵循其檔案約定也是為了在 liunx 系統上表現更好的效能。