首頁 >後端開發 >php教程 >淺析PHP使用include和require時的區別

淺析PHP使用include和require時的區別

不言
不言原創
2018-07-18 10:42:283780瀏覽

 這篇文章要跟大家分享的內容是PHP中檔案函數include和require的差別,有需要的朋友可以參考一下。

例如下面的程式碼:

include('hello.php');
echo 'include test final!';//include报错,但是会继续执行,显示:include test final!
require('hello.php');
echo 'require test final!';//require报错,停止代码的执行。

一句話總結:
1.include() 產生警告
2.require()  則導致一個致命錯誤

換句話說,如果你想在遺失檔案時停止處理頁面,那就別猶豫了,用  require()  吧。 include()  就不是這樣,腳本會繼續運作。同時也要確認設定了合適的include_path。
就是說再解析程式時即讀取require的文件,而不是解析後,如果不能讀取到被require的文件,就不能進行下一步動作。所以,不被正確包含就會導致程式的文件,用require比較好。可能效率上也略微高點。

注意:require() 無論如何都會包含文件,而include() 可以選擇性地包含:

<?php
 if(FALSE){
   require(&#39;x.php&#39;);
 }
 if(FALSE){
   include(&#39;s.php&#39;);
 }
?>

上面的程式碼中:x.php  一定會被包含,而  s. php  一定不會被包含。

二種方式提供不同的使用彈性:
require 的使用方法如 require("MyRequireFile.php"); 。這個函式通常放在 PHP 程式的最前面,PHP 程式在執行前,就會先讀入 require 所指定引進的檔案,讓它變成 PHP 程式網頁的一部份。
include 使用方法如 include("MyIncludeFile.php"); 。這個函數一般是放在流程控制的處理區段。 PHP 程式網頁在讀到 include 的檔案時,才將它讀進來。這種方式,可以把程式執行時的流程簡單化。
一、使用語法和簡介

1、include()
語法:include(/path/to/filename)
include ()語句將在其被呼叫的位置處包含一個檔案。包含一個文件與在該語句所在位置複製制定文件的資料具有相同內容的效果。
使用include()時可以忽略括號。

可以根據條件來執行include()語句。在條件語句中使用include()有個怪現象,它必須包圍在語句區塊大括號中,或用其他語句包圍符括起來。

2、include_once()
語法:include_once(filename)

include_once() 語句在腳本執行期間包含並執行指定檔案。此行為和 include() 語句類似,唯一區別是include_once()會先判斷一下這個檔案在之前是否已經被包含過,如已經包含,則忽略本次包含。
include_once() 應該用於嵌套包含的情況下,想確保它只被包含一次以避免函數重定義,變數重新賦值等問題。

小結:include_once()函數的作用與include相同,不過它會先驗證是否已經包含了該檔案。如果已經包含,則不再執行include_once。否則,則必須包含該文件。除了這一點與include完全相同。

3、require()
語法:require(filename)
require()很大程度與include相同,都是將一個模板檔包含到require呼叫坐在的位置。
require和include之間有兩點重要的區別。首先,無論require的位置如何,制定文件都會包含到出現require的腳本中。例如,即使require放在計算結果為假的if語句中,仍會包含指定檔。
第二個重要的區別是:require出錯時,腳本將停止運行,而在使用include的情況下,腳本將繼續執行。

4、require_once()
語法:require_once(filename)
require_once() 語句在腳本執行期間包含並執行指定檔。此行為和 require() 語句類似,唯一差異是require_once()會先判斷這個檔案在之前是否已經被包含過,如已經包含,則忽略本次包含。
require_once() 應該用於巢狀包含的情況下,想確保它只被包含一次以避免函數重定義,變數重新賦值等問題。

小結:隨著網站越來越大,可能會出現重複包含某些檔案。這也許不是問題,但又是修改了所包含檔案的變數後,卻因為後面再次包含原來的檔案而被覆蓋,可能不希望出現這種情況。也可能出現另一個問題,即所包含檔案中函數名稱的衝突。使用require_once就可以解決這些問題。
require_once函數確保檔案只包含一次。在遇到require_once後,後面再試圖包含相同的檔案時將被忽略。

二、區別總結

1、include()與require()語句區別。
兩者差異:這兩種結構除了在如何處理失敗之外完全一樣。
include() 產生一個警告,腳本會繼續運作。
require() 則導致一個致命錯誤,腳本會停止執行。

換句話說,如果想在遇到遺失檔案或遇到錯誤時停止處理頁面就用 require()。如果想在遇到錯誤時繼續處理頁面就用 include()。
注意在 PHP 4.3.5 之前,包含檔案中的語法錯誤不會導致程式停止,但從此版本之後會。

2、include_once()、require_once()與include()、require()的差異
include_once()和require_once()一樣,應該用於在腳本執行期間同一個檔案有可能被包含超過一次的情況下,想確保它只被包含一次以避免函數重定義,變數重新賦值等問題。這就是include_once()和require_once()與include() 和require()的主要差異。

三、需要注意的問題

1.路徑問題
特別是嵌套包含的時候,一定要注意包含文件的路徑。
例如 A文件包含了B文件,B文件包含了C文件,A,B,C文件都不在同一個資料夾下,這個時候往往很容易出錯。
解決方案:可以使用 dirname(__FILE__) 語句,這句話的意思是取得目前腳本的絕對路徑。如:require_once(dirname(__FILE__).'/config.php');

#2.效率問題
include_once(),require_once(),與include(),require ()比較,效率要低一些,因為他們至少得先判斷一下這個文件是否已包含。這問題在PHP5版有很大改進,不過效率還是有差異。

相關推薦:

php中include_once,require_once,和include,require的使用情境和差異。

PHP中include和require的區別,phpincluderequire

以上是淺析PHP使用include和require時的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn