二、編寫漂亮的代碼
1.將背景程式與前端程式分開
在編寫PHP程式時,有些代碼是用來處理一些事務,例如操作資料庫、進行數學運算等,而另外的一些代碼則只是交易處理的結果顯示出來,例如一些使用echo語句將結果以HTML的格式顯示在Web瀏覽器上的PHP代碼以及那些直接嵌入PHP程式的HTML代碼。首先我們應該清晰地區分這兩種代碼,把前者稱為背景程式,把後者稱為前端程式。
因為PHP是一種嵌入式程式設計語言,也就是說,所有的PHP代碼都可以嵌入到HTML代碼之中,這為程式的編寫帶來了許多便利之處。但是,“物極必反”,如果在一段較長的程式中將PHP代碼和HTML代碼混合編寫,這將使程式雜亂無章,不利於程式的維護和閱讀。所以我們需要儘可能地將這些程式中混雜於HTML代碼中的PHP代碼移植出來,在專門的檔案中將這些代碼封裝成函數,然後在HTML代碼中使用include語句來包含這些檔案,在適當的位置調用這些函數即可。
這種做法一方面使HTML代碼和PHP代碼都簡單易讀,另一方面因為HTML代碼需要不斷更新,而這種分離的方法可以確保背景程式不會被破壞。
同前端程式不同,背景程式更多追求的是穩定、結構化,極少更改,所以應該認真地設計和管理。其實,在設計台程式時,投入大量時間是值得的,“現在栽樹,以後乘涼”,在以後的設計工作中將可以輕鬆地使用現在編寫的背景程式。
2.靈活使用包含檔案
正如前面所說的那樣,背景程式應當安排在一系列的包含檔案中。包含檔案可以通過include語句在需要時動態裝入,也可以在php.ini檔案中通過使用auto_prepend_file指令預先自動裝入。
如果使用後一種方法的話,雖然取得了一勞永逸的好處,但是也有一些缺點值得我們注意。下面的一段代碼向我們展示瞭解析一個龐大的包含檔案需要一定的時間:
require(timing.inc);
ss_timing_start();
include(test.inc);
ss_timing_stop();
echo
.ss_timing_current().
?>
在上面的代碼中,test.inc是一個1000行的包含檔案,啟動並執行結果顯示,解析這個包含檔案花費了0.6秒鐘,對於一個大型網站來說,這個速度並不是可以忽略不記的。
使用包含檔案的另外一個缺點是:如果一個檔案中的一個語句發生錯誤,將會使整個網站的PHP程式都無法運行。所以使用起來也及其小心。
其實,對包含檔案稍做處理,即可以使包含檔案只在需要時進行解析。下面的代碼使abc.inc檔案只在程式需要時才作解析:
if ( defined( __LIBA_INC) ) return;
define( __LIBA_INC, 1 );
/*
* 代碼...
*/
?>
3.使用物件導向的編程方法
PHP也是一種物件導向的語言,物件導向的編程方法是優秀的程式員們非常推崇的一種軟體設計方法,在PHP編程中可以充分發揮物件導向語言的優勢,對編程中的對象進行封裝。在前面的代碼中,我們使用了物件導向的方法,例如在管理資料庫時,我們將query()函數封裝進資料庫類中,這極大地方便了代碼的管理,增加了程式的可讀性。
三、追求程式速度,而不是編程的速度
在網站建設中,程式運行速度和網頁下載速度都是關係成敗的重要因素。作為一名Web程式員,應該更加註意代碼的運行速度。下面介紹的幾種方法都在不同程度上提高了代碼的運行速度。
1.使用內嵌的HTML代碼,而不是PHP的echo語句。
因為PHP是一門嵌入式Web程式設計語言,可以將HTML代碼和PHP代碼相互嵌入。但是很多程式員擔心在HTML代碼中過多的使用""嵌入PHP代碼會多次調用PHP解譯器,從而降低了PHP代碼的運行速度,所以寧願使用PHP的echo語句來輸出HTML代碼,而不直接使用HTML代碼。但事實卻恰恰相反。每一個PHP頁面只調用一次PHP解譯器來解釋所有的PHP代碼,所以,只在需要時才嵌入PHP代碼,而大多數的時候直接使用HTML代碼輸入結果,不但不會降低程式的運行速度,而且因為減少了對echo語句的解析,往往可以提高代碼的運行速度。
下面的一段代碼證明了我們的結論。在這段代碼中,我們使用了前面介紹的時間測試函數。