##包含文件
????提取出來具有通用函數的包含文件,文件后綴以`.inc`來命名,表明這是一個包含文件。
????如果有多個`.inc`文件需要包含多頁面,請把所有`.inc`文件封裝在一個文件里面,具體到頁面只需要包換一個`.inc`文件就可以了。
????如:`xxx_session.inc`、`xxx_comm.inc`、`xxx_setting.inc`、`myssql_db.inc`。
????把以上文件以以下方式,封裝在`xxx.basic.inc`文件里面:
~~~``
require_once('xxx_session.inc');
require_once('xxx_comm.inc');
require_once('xxx_setting.inc');
require_once('mysql_db.inc');
~~~
## PHP和HTML代碼的分離問題
????對性能要求不是很高的項目和應用,我們建議不采用 PHP 和 HTML 代碼直接混排的方式書寫代碼,而采用 PHP 和 HTML 代碼分離的方式,即采用模版的方式處理,這樣一方面對程序邏輯結構更加清晰有利,也有助于開發過程中人員的分工安排,同時還對日后項目的頁面升級該版提供更多便利。
**對于一些特殊情況,比如對性能要求很高的應用,可以不采用模版方式。**
## 類的構造函數
如果要在類里面編寫構造函數,必須遵循以下規則:
????a.不能在構造函數中有太多實際操作,頂多用來初始化一些值和變量;
????b.不能在構造函數中因為使用操作而返回false或者錯誤,因為在聲明和實例化一個對象的時候,是不能返回錯誤的;
##錯誤返回檢測規則
檢查所有的系統調用的錯誤信息,除非你要忽略錯誤。
為每條系統錯誤消息定義好系統錯誤文本,并記錄錯誤LOG。
##引用的使用
????引用在程序中使用比較多,為了公用同一個內存,而不需要另外進行復制,XXX環境下的引用使用時,需要注意下面的情況;
????在對函數的輸入參數中使用引用時,不能在調用的時候在輸入參數前加 `&` 來引用,而直接使用該變量即可,同時必須在函數定義的時候說明輸入參數來自引用,比如下面的代碼:
~~~
$a = 1;
function ab( &$var ) {
$var ++;
return $var;
}
$b = ab($a); // 注意,此處不能使用 $b = ab(&$a)的方式;
echo $b."\n";
echo $a."\n";
~~~
此時 `$a` 和 ``$b`` 都是 2;
XXX環境下對引用的特殊要求源自 php.ini 文件里面的`allow_call_time_pass_reference` 項設置,對外公開的版本是 `On`,這樣就可以支持`&`直接加到調用函數時變量前面進行引用,但是這一方法遭到抗議,并可能在將來版本的 PHP/Zend 里不再支持。受到鼓勵的指定哪些參數按引用傳遞的方法是在函數聲明里。你被鼓勵嘗試關閉這一選項(使用`off`,XXX的所有運行環境下都是`off`)并確認你的腳本仍能正常工作,以保證在將來版本的語言里它們仍能工作。
##PHP項目開發中的程序邏輯結構
????對于 PHP 項目開發,盡量采用 `OOP` 的思想開發,尤其在 PHP5 以后,對于面向對象的開發功能大大提高。
????在 PHP 項目中,我們建議將獨立的功能模塊盡量寫成函數調用,對應一整塊業務邏輯,我們建議封裝成類,既可以提高代碼可讀性,也可以提高代碼重用性。比如,我們通常將對數據庫的接口封裝成數據庫類,有利于平臺的移植。
????重復的代碼要做成公共的庫。(除了我們在 `plug-in` 產品上遇到的情況,該產品系列有多個相類似的產品,為了盡可能地減少安裝包尺寸,不適合將這些產品共用的所有函數做成公共的庫)。