包含文件
如果你目前著手的Web站點開發項目規模較大,那你對代碼重用必定深有體會,比方說,不管是HTML還是PHP代碼塊,只要項目足夠大,比如有1000個Web頁,你即便是一年只修改一次包含版權信息的頁腳也會讓你痛不欲生。
而PHP可以通過一些函數幫助你重用代碼,你要具體用到的函數依賴於你打算重用的內容。
主要的函數是:
* include() 和 include_once()
* require() 和require_once()
include()函數包含給定的文件,比如:
include('/home/me/myfile');
包含文件中的任何代碼都將在include() 所在的代碼頁的變量范圍之內執行。你可以包含服務器上的靜態文件或者包含在其他服務器上的目標文件,方法是組合使用include()和fopen()。
include_once()函數和include()函數功能類似,只是該函數會檢查被包含文件內的代碼是否已經被目前的腳本所包含過。如果代碼已經被腳本所包含,該函數就不再包含相應的文件了。
require()函數用給定文件的內容取代自身。這一替換過程發生在PHP引擎編譯你的代碼而不是執行代碼階段,這可和include()不一樣,後者首先被計算再加到文擋中。require()函數多用於靜態元素,而include()函數則主要用於動態元素。和include_once()類似,require_once()函數會檢查給定代碼是否早已經插入到了文擋內,如果這樣,給定代碼就不會被再次插入文檔。
我建議你最好對諸如版權、靜態文本和其他不含變量的元素這類信息采用require函數,那些依賴其他腳本來實現自己內容的元素也最好采用require函數,例如:
<HTML>
<HEAD><TITLE>Something</TITLE></HEAD>
<BODY>
[a lot of content]
<?
// insert copyright
require('/home/me/mycopyright');
?>
</BODY>
</HTML>
另一方面,我經常用include()函數把函數庫或類似的內容放到腳本之外:
<?
// get my function library
include('/home/me/myfunctions');
// do PHP things with my functions ?>
<HTML>
<HEAD><TITLE>Something</TITLE></HEAD>
<BODY>
[a lot of content]
</BODY>
</HTML>
你肯定會問:“那麼,被included或者被required的文件都來自哪裡呢?”答案很簡單:“你的系統。”不過,有時,有些代碼會包含了諸如帶有用戶名和密碼的數據庫連接函數之類的安全信息,在這樣的情況下,顯而易見,你肯定不希望這些東西也成為文檔的一部分弄得全世界都知道。
你可以把包含文件(included或者required)放在系統的任何地方,只要用戶所能用到的PHP可以訪問這些文件即可。你還可以給這些文件以任何你希望給出的文件擴展名,或者不設擴展名。
使用include()和require()函數可以讓Web站點上普遍存在或者經常變動的元素變得更加容易處理。