PHP包含文件函數(shù)include、include_once、require、require_once區(qū)別總結(jié)
例如下面的代碼:
echo 'include test final!';//include報錯,但是會繼續(xù)執(zhí)行,顯示:include test final!
require('hello.php');
echo 'require test final!';//require報錯,停止代碼的執(zhí)行。
一句話總結(jié):
1.include() 產(chǎn)生一個警告
2.require() 則導(dǎo)致一個致命錯誤
換句話說,如果你想在丟失文件時停止處理頁面,那就別猶豫了,用 require() 吧。include() 就不是這樣,腳本會繼續(xù)運行。同時也要確認(rèn)設(shè)置了合適的include_path。
就是說再解析程序時即讀取require的文件,而不是解析后,如果不能讀取到被require的文件,就不能進行下一步動作。所以,不被正確包含就會導(dǎo)致程序的文件,用require比較好??赡苄噬弦猜晕⒏唿c。
注意:require() 無論如何都會包含文件,而include() 可以有選擇地包含:
<?php
if(FALSE){
require('x.php');
}
if(FALSE){
include('s.php');
}
?>
上面的代碼中:x.php 一定會被包含,而 s.php 一定不會被包含。
二種方式提供不同的使用彈性:
require 的使用方法如 require("MyRequireFile.php"); 。這個函式通常放在 PHP 程式的最前面,PHP 程式在執(zhí)行前,就會先讀入 require 所指定引入的檔案,使它變成 PHP 程式網(wǎng)頁的一部份。
include 使用方法如 include("MyIncludeFile.php"); 。這個函式一般是放在流程控制的處理區(qū)段中。PHP 程式網(wǎng)頁在讀到 include 的檔案時,才將它讀進來。這種方式,可以把程式執(zhí)行時的流程簡單化。
一、使用語法和簡介
1、include()
語法:include(/path/to/filename)
include()語句將在其被調(diào)用的位置處包含一個文件。包含一個文件與在該語句所在位置復(fù)制制定文件的數(shù)據(jù)具有相同內(nèi)容的效果。
使用include()時可以忽略括號。
可以根據(jù)條件來執(zhí)行include()語句。在條件語句中使用include()有個怪現(xiàn)象,它必須包圍在語句塊大括號中,或者用其他語句包圍符括起來。
2、include_once()
語法:include_once(filename)
include_once() 語句在腳本執(zhí)行期間包含并運行指定文件。此行為和 include() 語句類似,唯一區(qū)別是include_once()會先判斷一下這個文件在之前是否已經(jīng)被包含過,如已經(jīng)包含,則忽略本次包含。
include_once() 應(yīng)該用于嵌套包含的情況下,想確保它只被包含一次以避免函數(shù)重定義,變量重新賦值等問題。
小結(jié):include_once()函數(shù)的作用與include相同,不過它會首先驗證是否已經(jīng)包含了該文件。如果已經(jīng)包含,則不再執(zhí)行include_once。否則,則必須包含該文件。除了這一點與include完全相同。
3、require()
語法:require(filename)
require()在很大程度上與include相同,都是將一個模板文件包含到require調(diào)用坐在的位置。
require和include之間有兩點重要的區(qū)別。首先,無論require的位置如何,制定文件都將包含到出現(xiàn)require的腳本中。例如,即使require放在計算結(jié)果為假的if語句中,依然會包含指定文件。
第二個重要的區(qū)別是:require出錯時,腳本將停止運行,而在使用include的情況下,腳本將繼續(xù)執(zhí)行。
4、require_once()
語法:require_once(filename)
require_once() 語句在腳本執(zhí)行期間包含并運行指定文件。此行為和 require() 語句類似,唯一區(qū)別是require_once()會先判斷一下這個文件在之前是否已經(jīng)被包含過,如已經(jīng)包含,則忽略本次包含。
require_once() 應(yīng)該用于嵌套包含的情況下,想確保它只被包含一次以避免函數(shù)重定義,變量重新賦值等問題。
小結(jié):隨著網(wǎng)站越來越大,可能會出現(xiàn)重復(fù)包含某些文件。這也許不是問題,但又是修改了所包含文件的變量后,卻由于后面再次包含原來的文件而被覆蓋,可能不希望出現(xiàn)這種情況。還可能出現(xiàn)另一個問題,即所包含文件中函數(shù)名的沖突。使用require_once就可以解決這些問題。
require_once函數(shù)確保文件只包含一次。在遇到require_once后,后面再試圖包含相同的文件時將被忽略。
二、區(qū)別總結(jié)
1、include()與require()語句區(qū)別。
兩者區(qū)別:這兩種結(jié)構(gòu)除了在如何處理失敗之外完全一樣。
include() 產(chǎn)生一個警告,腳本會繼續(xù)運行。
require() 則導(dǎo)致一個致命錯誤,腳本會停止運行。
換句話說,如果想在遇到丟失文件或遇到錯誤時停止處理頁面就用 require()。如果想在遇到錯誤時繼續(xù)處理頁面就用 include()。
注意在 PHP 4.3.5 之前,包含文件中的語法錯誤不會導(dǎo)致程序停止,但從此版本之后會。
2、include_once()、require_once()與include()、require()的區(qū)別
include_once()和require_once()一樣,應(yīng)該用于在腳本執(zhí)行期間同一個文件有可能被包含超過一次的情況下,想確保它只被包含一次以避免函數(shù)重定義,變量重新賦值等問題。這就是include_once()和require_once()與include() 和require()的主要區(qū)別。
三、需要注意的問題
1.路徑問題
特別是嵌套包含的時候,一定得注意包含文件的路徑。
比如 A文件包含了B文件,B文件包含了C文件,A,B,C文件都不在同一個文件夾下,這個時候往往很容易出錯誤。
解決方案:可以使用 dirname(__FILE__) 語句,這句的意思是獲得當(dāng)前腳本的絕對路徑。如:require_once(dirname(__FILE__).'/config.php');
2.效率問題
include_once(),require_once(),與include(),require()比較,效率要低一些,因為他們至少得先判斷一下這個文件是否已包含。這一問題在PHP5版本有很大改進,不過效率還是有差別。
- PHP中include和require的區(qū)別實例分析
- php使用include 和require引入文件的區(qū)別
- PHP中include()與require()的區(qū)別說明
- PHP中include/require/include_once/require_once使用心得
- 簡單談?wù)凱HP中的include、include_once、require以及require_once語句
- PHP中require和include路徑問題詳解
- PHP中include與require使用方法區(qū)別詳解
- php include和require的區(qū)別深入解析
- PHP中include()與require()的區(qū)別說明
- PHP中include和require的使用詳解
相關(guān)文章
laravel 實現(xiàn)關(guān)閉CSRF(全部關(guān)閉、部分關(guān)閉)
今天小編就為大家分享一篇laravel 實現(xiàn)關(guān)閉CSRF(全部關(guān)閉、部分關(guān)閉),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10
php和數(shù)據(jù)庫結(jié)合的一個簡單的web實例 代碼分析 (php初學(xué)者)
這是一個基本的教程。沒有怪異的代碼,只是一些基礎(chǔ)?,F(xiàn)在有大量的教程是基于UNIX機器的,這個教程將集中在基于Windows平臺上。2011-07-07
PHP網(wǎng)頁游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十一)
這篇文章主要介紹了PHP網(wǎng)頁游戲Xnova(ogame)源碼解讀的建筑頁面部分,需要的朋友可以參考下2014-06-06
ThinkPHP中Common/common.php文件常用函數(shù)功能分析
這篇文章主要介紹了ThinkPHP中Common/common.php文件常用函數(shù)功能,通過注釋的形式詳細(xì)分析了C方法、tag方法、B方法及autoload方法的功能與代碼原理,需要的朋友可以參考下2016-05-05

