1. 程式人生 > >PHP中 include,include_once,require,require_once的區別詳解

PHP中 include,include_once,require,require_once的區別詳解

1、概要

  • incluce在用到時載入,遇到錯誤可以繼續執行。
  • require在一開始就載入,遇到錯誤中斷執行。
  • _once字尾表示已載入的不載入,載入一次。
  • 任何函式後面加@就會遮蔽該函式的錯誤資訊

require()語句的效能與include()相類似,都是包括執行指定檔案。不同之處在於:對include()語句來說,在執行檔案時每次都要進行讀取評估;而對於require()來說,檔案只處理一次(實際上,檔案內容替換require()語句)。這就意味著如果可能執行多次的程式碼,則使用require()效率比較高。另外一方面,如果每次執行程式碼時是讀取不同的檔案,或者有通過一組檔案迭代的迴圈,就使用include()語句。

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

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

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

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

2、詳情

2.1 報錯方式

     include引入檔案的時候,如果碰到錯誤,會給出提示,並繼續執行下邊的程式碼。

  require引入檔案的時候,如果碰到錯誤,會給出提示,並停止執行下邊的程式碼。

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

newfile.php

    <?php

    include 'test-nothing.php';

    echo 'abc';

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

Warning: include(test-nothing.php): failed to open stream: No such file or directory in C:\wamp\www\APIXC\newfile.php on line2

Warning: include(): Failed opening 'test-nothing.php' for inclusion (include_path='.;C:\php\pear') in C:\wamp\www\APIXC\newfile.php on line2

abc

newfile.php

    <?php

    require 'test-nothing.php';

    echo 'abc';

    ?></span>
瀏覽http://localhost/newfile.php,因為沒有找到test-nothing.php檔案,我們看到了報錯資訊,但是,報錯資訊的下邊沒有顯示abc,你看到的可能是類似下邊的情況:
Warning: require(test-nothing.php): failed to open stream: No such file or directory in C:\wamp\www\APIXC\newfile.php on line2

Fatal error: require(): Failed opening required 'test-nothing.php' (include_path='.;C:\php\pear') in C:\wamp\www\APIXC\newfile.php on line2

2.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 < 3) {

      require "somefile.$i.php";

      $i++;

    }

可以從以上這段程式碼中看出,每一次迴圈的時候,程式都將把同一個檔案包含進去,很顯然這不是我們想要的,可以看出這段程式碼希望在每次迴圈時,將不同的檔案包含進來,如果要完成這個功能,只能使用函式include():
    $i = 1;

    while ($i < 3) {

      include "somefile.$i.php";

      $i++;

    }

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

3、總結

require和include之間有兩點重要的區別。

載入順序:無論require的位置如何,制定檔案都將包含到出現require的指令碼中。例如,即使require放在計算結果為假的if語句中,依然會包含指定檔案。

執行方式:require出錯時,指令碼將停止執行,而在使用include的情況下,指令碼將繼續執行。

XXXX_once()

隨著網站越來越大,可能會出現重複包含某些檔案。這也許不是問題,但又是修改了所包含檔案的變數後,卻由於後面再次包含原來的檔案而被覆蓋,可能不希望出現這種情況。還可能出現另一個問題,即所包含檔案中函式名的衝突。使用require_once就可以解決這些問題。而且對於邏輯複雜的程式,多次引用可以會出現意想不到的錯誤發生,在不已效率為瓶頸的時候可以優先考慮XXXX_once()來替代原有函式的使用。

相關推薦

PHPincluderequire區別

for in repl 這不 語句 沒有 16px targe size something 1、概要    require()語句的性能與include()相類似,都是包括並運行指定文件。不同之處在於:對include()語句來說,在執行文件時每次都要進行讀取和評估;

PHP include,include_once,require,require_once區別

1、概要 incluce在用到時載入,遇到錯誤可以繼續執行。 require在一開始就載入,遇到錯誤中斷執行。 _once字尾表示已載入的不載入,載入一次。 任何函式後面加@就會遮蔽該函式的錯誤資訊 require()語句的效能與include()相類似,都是包括並

phpincluderequire區別(整理)

服務 條件 工作方式 作用 就會 php程序 兩個 發生 ref require 的使用方法如 require("MyRequireFile.php"); 。這個函數通常放在 PHP 程序的最前面,PHP 程序在執行前,就會先讀入 require 所指定引入的文

PHP includerequire區別

require 文件的 沒有 流程控制 nbsp 執行 文件 php文件 函數 PHP中引用文件的方法有兩種:require和include 他們的用途是完全一樣的。 require:require("########");這個函數一般放在PHP文件的最前面,程序在執行前就

PHPinclude()與require()的區別說明

靜態頁 檢查 服務器 code 中斷 完全 變量 方式 返回值 require 的使用方法如 require("MyRequireFile.php"); 。這個函數通常放在 PHP 程序的最前面,PHP 程序在執行前,就會先讀入 require 所指定引入的文件,使它變成

phpinclude()和require()的區別

1.引用檔案方式     對 include()來說,在include()執行時檔案每次都要進行讀取和評估;而對於require()來說,檔案只處理一次(實際上,檔案內容替換 了require()語句。這就意味著如果有包含這些指令之一的程式碼和可能執行多次的程式碼,則使用r

[PHP]PHPinclude()與require()的區別

今日看php文件,看到include和require區別的講解,感覺這對於初學者是一個很容易迷惑的地方,在此記錄下來,以便自己查閱,也希望對各位php朋友有所幫助。引用檔案的方法有兩種:require 及 include。兩種方式提供不同的使用彈性。 require 的使用方法如 require("MyReq

PHP函式include include_once requirerequire_once區別

瞭解下include、include_once、require和require_once這4個函式: include函式:會將指定的檔案讀入並且執行裡面的程式; require函式:會將目標檔案的內容讀入,並且把自己本身代換成這些讀入的內容; include_once

PHPincluderequire語句的區別

warning mar 處理 生成 區別 war 插入 php 通過 通過 include 或 require 語句,可以將 PHP 文件的內容插入另一個 PHP 文件(在服務器執行它之前)。 include 和 require 語句是相同的,除了錯誤處理方面:

MySQL存儲引擎的MyISAM和InnoDB區別

訪問 過程 包含 lte 處理機制 comm 用戶 isam log MyISAM是MySQL的默認數據庫引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的順序訪問方法)所改良。雖然性能極佳,但卻有一個缺點:不

phpself,this, parent

pre name 重寫 重新 調用父類 set 改變 col upload 1、前言 self,this,parent 這三個關鍵字在 類的使用中可謂屢見不鮮,那麽這三個關鍵字又有什麽區別;從字面意思理解: this 是指向當前類(就近原則,離誰近跟誰) self

JavaScript Property 和 Attribute 的區別

sce 否則 遞歸 tro ole 條件 節點 記錄 could property 和 attribute非常容易混淆,兩個單詞的中文翻譯也都非常相近(property:屬性,attribute:特性),但實際上,二者是不同的東西,屬於不同的範疇。 property是DOM

Jqueryattr與prop的區別

當點選左上方那個checkBox時,要將下面的checkBox全部選中,我們的程式碼是這樣的 $("input[name='checkbox']").attr("checked",true); 然並卵,一點效果都沒有,後來換成這樣,好了 $(function(){ $("#all").c

Java == 號與equals()方法區別

== 號與equals()方法區別這個問題在面試中經常被問到,如果你瞭解的不透徹,很容易被問蒙。下面我們來一起看看吧。 1.基本資料型別,也稱原始資料型別。byte,short,char,int,long,float,double,boolean 他們之間的比較,應用雙等號(==)

MySQL儲存引擎的MyISAM和InnoDB區別

在使用MySQL的過程中對MyISAM和InnoDB這兩個概念存在了些疑問,到底兩者引擎有何分別一直是存在我心中的疑問。為了解開這個謎題,搜尋了網路,找到了如下資訊: MyISAM是MySQL的預設資料庫引擎(5.5版之前),由早期的ISAM(Indexed Sequent

PHPtry{}catch{}的具體用法

PHP中try{}catch{}是異常處理,將要執行的程式碼放入TRY塊中,如果這些程式碼執行過程中某一條語句發生異常,則程式直接跳轉到CATCH塊中,由$e收集錯誤資訊和顯示。任何呼叫 可能丟擲異常的方法的程式碼都應該使用try語句,Catch語句用來處理可能

php幾種常見安全設定

php中幾種常見安全設定詳解  另外,目前鬧的轟轟烈烈的SQL Injection也是在PHP上有很多利用方式,所以要保證安全,PHP程式碼編寫是一方面,PHP的配置更是非常關鍵。 我們php手手工安裝的,php的預設配置檔案在 /usr/local/apache2/conf/ph

PHP isset()與empty()的使用區別

關於isset()與empty()的區別有一拼文章講得很詳細,值得借鑑: PHP的isset()函式 一般用來檢測變數是否設定 格式:bool isset ( mixed var [, mixed var [, …]] ) 功能:檢測變數是否設定

phpPHPfile_get_contents()與file_put_contents()函式細節

file_get_contents函式 一般的也就是使用file_get_contents($url),但是關於這個函式還有很多沒有注意到的地方。 先看關於手冊: file_get_contents(path,include_path,context,s

C++的 .h 和 .cpp 區別

在C++程式設計過程中,隨著專案的越來越大,程式碼也會越來越多,並且難以管理和分析。於是,在C++中就要分出了頭(.h)檔案和實現(.cpp)檔案,並且也有了Package的概念。 對於以C起步,C#作為“母語”的我剛開始跟著導師學習C++對這方面還是感到很模糊。雖然我