PHP的include()和require()是兩種包含外部文件的方法,對於這兩種方法有什麼區別,很多初學者可能不是很明白。下面總結一下PHP include()和require()的區別:
1:加載失敗的處理方式不同:
include()會產生一個警告,而require()則導致一個致命的錯誤(出現錯誤,腳本停止執行)
require() :如果文件不存在,會報出一個fatal error.腳本停止執行
include() : 如果文件不存在,會給出一個 warning,但腳本會繼續執行
這裏特別要注意的是:使用include()文件不存在時,腳本繼續執行,這種情況只出現在PHP 4.3.5之前
推薦使用require_once()和include_once(),可以檢測文件是否有重複包含。
2.php性能
對include()來說,在 include()執行時文件每次都要進行讀取和評估;
而對於require()來說,文件只處理一次(實際上,文件內容替換了require()語句)。
這就意味着如果有包含這些指令之一的代碼和可能執行多次的代碼,則使用require()效率比較高。
另一方面,如果每次執行代碼時相讀取不同的文件,或者有通過一組文件疊代的循環,就使用include(),
因爲可以給想要包括的文件名設置一個變量,當參數爲include()時使用這個變量。
3.二種方式提供不同的使用彈性。
require 的使用方法如 require(“./inc.php”); 。通常放在 PHP 程式的最前面,PHP 程式在執行前,就會先讀入 require 所指定引入的檔案,使它變成 PHP 程式網頁的一部份。
include 使用方法如 include(“./inc/.php”); 。一般是放在流程控制的處理區段中。PHP 程式網頁在讀到 include 的檔案時,纔將它讀進來。這種方式,可以把程式執行時的流程簡單化。
require即使在條件位FALSE的時候也會被包含,而include只會在執行到改位置時候纔會去執行。
require_once() 語句在腳本執行期間包括並運行指定文件。此行爲和 require() 語句類似,唯一區別是如果該文件中的代碼已經被包括了,則不會再次包括。require_once()函數的作用和 require() 是幾乎相同的
include_once() 語句在腳本執行期間包括並運行指定文件。此行爲和 include() 語句類似,唯一區別是如果該文件中的代碼已經被包括了,則不會再次包括。include_once()函數的作用和 include() 是幾乎相同的
require_once的作用是會檢查之前是否加載過該文件,如果沒有加載則加載 如果加載過就不再次加載,比如某文件定義了一個類型 如果兩次加載該文件會出現錯誤
以上就是PHP include()和require()方法的區別。
4. 程序的處理不同。
require相當於預處理,即它是在程序運行之前就被執行的。所以它是不可以用在控制語句中的,如if中。如果不好理解看完下面的include,對比一下就清楚了。
include相當於函數,它是在程序運行時執行的。所以它可以用在控制語句中。
if(1 > 0){
include 'config.php';
}else{
include 'setting.php';
}
這段代碼運行的時候,config.php這個文件會被引用。而setting.php不會。
類似的代碼:if(1 > 0){
require 'config.php';
}else{
require 'setting.php';
}
上面這部分代碼,config.php及setting.php都會被引用。因爲在沒有運行到if這個控制語句前,兩個require語句都運行了。
Tip:使用require和include要注意如果重複引用一個文件的時候,而這個文件裏頭又有函數定義的話就會報錯。
Fatal error: Cannot redeclare ...
所以要在文件裏面判斷一下這個函數是否存在,可以使用function_exists('函數名')