如果你目前著手的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網站上普遍存在或者經常變動的元素變得更加容易處理。