天天看點

PHP中include和require的差別詳解

<a href="http://www.cnblogs.com/xia520pi/p/3697099.html">http://www.cnblogs.com/xia520pi/p/3697099.html</a>

另外   任何函數前加@就會屏蔽錯誤資訊

   require()語句的性能與include()相類似,都是包括并運作指定檔案。不同之處在于:對include()語句來說,在執行檔案時每次都要進行讀取和評估;而對于require()來說,檔案隻處理一次(實際上,檔案内容替換require()語句)。這就意味着如果可能執行多次的代碼,則使用require()效率比較高。另外一方面,如果每次執行代碼時是讀取不同的檔案,或者有通過一組檔案疊代的循環,就使用include()語句。

  require的使用方法如:require("myfile.php"),這個語句通常放在PHP腳本程式的最前面。PHP程式在執行前,就會先讀入require()語句所引入的檔案,使它變成PHP腳本檔案的一部分。include使用方法和require一樣如:include("myfile.php"),而這個語句一般是放在流程控制的處理區段中。PHP腳本檔案在讀到include()語句時,才将它包含的檔案讀取進來。這種方式,可以把程式執行時的流程簡單化。

incluce在用到時加載

require在一開始就加載

_once字尾表示已加載的不加載

  PHP系統在加載PHP程式時有一個僞編譯過程,可使程式運作速度加快。但incluce的文檔仍為解釋執行。include的檔案中出錯了,主程式繼續往下執行,require的檔案出錯了,主程式也停了,是以包含的檔案出錯對系統影響不大的話(如界面檔案)就用include,否則用require。

  require()和include()語句是語言結構,不是真正的函數,可以像php中其他的語言結構一樣,例如echo()可以使用echo("ab")形式,也可以使用echo "abc"形式輸出字元串abc。require()和include()語句也可以不加圓括号而直接加參數。

  include_once()和require_once()語句也是在腳本執行期間包括運作指定檔案。此行為和include()語句及require()類似,使用方法也一樣。唯一差別是如果該檔案中的代碼已經被包括了,則不會再次包括。這兩個語句應該用于在腳本執行期間,同一個檔案有可能被包括超過一次的情況下,確定它隻被包括一次,以避免函數重定義以及變量重新指派等問題。

  include引入檔案的時候,如果碰到錯誤,會給出提示,并繼續運作下邊的代碼。

  require引入檔案的時候,如果碰到錯誤,會給出提示,并停止運作下邊的代碼。

  用例子來說話,寫兩個php檔案,名字為test-include.php和test-require.php,注意相同的目錄中,不要存在一個名字是test-nothing.php的檔案。

test-include.php &lt;?php include 'test-nothing.php'; echo 'abc'; ?&gt;
test-require.php require 'test-nothing.php';

  浏覽http://localhost/test-include.php,因為沒有找到test-nothing.php檔案,我們看到了報錯資訊,同時,報錯資訊的下邊顯示了abc,你看到的可能是類似下邊的情況:

Warning: include(test-nothing.php) [function.include]: failed to open stream: No such file or directory in D:\www\test-include.php on line 2 Warning: include() [function.include]: Failed opening 'test-nothing.php' for inclusion (include_path='.;C:\php5\pear') in D:\www\test-include.php on line 2 abc

浏覽http://localhost/test-require.php,因為沒有找到test-nothing.php檔案,我們看到了報錯資訊,但是,報錯資訊的下邊沒有顯示abc,你看到的可能是類似下邊的情況:

Warning: require(test-nothing.php) [function.require]: failed to open stream: No such file or directory in D:\www\test-require.php on line 2 Fatal error: require() [function.require]: Failed opening required 'test-nothing' (include_path='.;C:\php5\pear') in D:\www\test-require.php on line 2 

  include()與require()的功能相同,用法上卻有一些不同,include()是有條件包含函數,而require()則是無條件包含函數。

  例如下面例子,如果變量$somg為真,則将包含檔案somefile.php: 

if($some){   include 'somefile.php'; }

  但無論$some取何值,下面的代碼将把檔案somefile.php包含進檔案裡:

if($something){   require 'somefile.php';

  下面的例子充分說明了這兩個函數之間的不同:

$i = 1; while ($i &lt; 3) {   require "somefile.$i.php";   $i++;

  可以從以上這段代碼中看出,每一次循環的時候,程式都将把同一個檔案包含進去,很顯然這不是我們想要的,可以看出這段代碼希望在每次循環時,将不同的檔案包含進來,如果要完成這個功能,隻能使用函數include():

  include "somefile.$i.php";

  include()執行時需要引用的檔案每次都要進行讀取和評估,require()執行時需要引用的檔案隻處理一次(實際上執行時需要引用的檔案内容替換了require()語句)可以看出若有包含這些指令之一的代碼和可能執行多次的代碼,則使用require()效率比較高,若每次執行代碼時相讀取不同的檔案或者有通過一組檔案疊代的循環,就使用include(),可以給想要包括的檔案名設定變量,當參數為 include()時使用這個變量。

 本文轉自茄子_2008部落格園部落格,原文連結:http://www.cnblogs.com/xd502djj/p/4681039.html,如需轉載請自行聯系原作者。