在php中,include和require的作用比較容易混淆。下面我以一個經典例子來深刻說明它們的差異。
當我們經常存取一個資料庫時,可以把連庫語句寫成一個檔案
con_db.php
<?php
$dbh = mysql_connect('localhost','','');
mysql_select_db('admreqs');
?>
在實際應用時,我們可以在程式中呼叫這個檔案。
如require("con_db.php")或include("con_db.php)
這時,兩個函數的效果是差不多的。
但如果這樣用
filename.php
<?php
require("con_db.php")
function myfun($par1,$par2)
{包含對資料庫處理的語句}
.....
myfun($par1,$par2);
.....
myfun($p1,$p2);
?>
檔案到myfun處將不能繼續執行,因為函數裡無法得到外面的變數(include也是一樣的)。除非把$dbh當作一個變數傳給函數。這又增加了呼叫函數的複雜度。
我們可以把require或include放在函數裡面來解決這個問題。
如果使用include,檔案的第一個函數呼叫處將順利通過,但第二個呼叫將無法執行,原因是不能在沒有關閉資料庫時在開啟一次,也就是說,con_db.php執行了兩次。將include換成require,一切都正常。
也就是說,require類似一次預掃描,在程式執行時,無論在函數裡或是函數外,都會先把require的檔案執行,而且只執行一次。而include則是每執行一次就調用一次文件,即這次執行後,下次再執行執行到這裡,仍將再執行一次。
因此,如果在一個迴圈中,某些語句你只想執行一次,那你用require包括它們就可以了。