-
include() require() 區別:
-
引用文件方式
- 對於include()來說,在include()執行時文件每次都要進行讀取和評估;
- 對於require()來說,文件只處理一次(實際上,文件內容替換了require()語句)。
- 這就意味着如果有包含這些指令之一的代碼和可能執行多次的代碼,則使用require()效率比較高。
-
是否有條件引用
- include()是有條件包含函數,只有程序執行到該代碼段時,纔會調用外部文件。
- require()則是無條件包含函數,只要程序一執行,就會立刻調用外部文件。
- 例如在下面的一個例子中,如果變量$somgthing爲真,則將包含文件somefile:
if($something){
include("somefile");
}
但不管$something取何值,下面的代碼將把文件somefile包含進文件裏:
if($something){
require("somefile");
}
下面的這個有趣的例子充分說明了這兩個函數之間的不同。
$i = 1;
while ($i < 3) {
require("somefile.$i");
$i++;
}
在這段代碼中,每一次循環的時候,程序都將把同一個文件包含進去。很顯然這不是程序員的初衷,從代碼中我們可以看出這段代碼希望在每次循環時,將不同的文件包含進來。如果要完成這個功能,必須求助函數include():
$i = 1;
while ($i < 3) {
include("somefile.$i");
$i++;
} - 如果每次執行代碼時相讀取不同的文件(雖然不大可能),性能。或者有通過一組文件疊代的循環,就使用include(),因爲可以給想要包括的文件名設置一個變量,當參數爲include()時使用這個變量。
-
-
處理錯誤會時會有所不同
-
用例子來說話,寫兩個php文件,名字爲test1.php 和test2.php,注意相同的目錄中,不要存在一個名字是test999.php的文件。
test.php
<?PHP
include (”test999.php”);
echo “abc”;
?>test2.php
<?PHP
require (”test999.php”)
echo “abc”;
?>瀏覽第一個文件,因爲沒有找到test999.php文件,我們看到了報錯信息,同時,報錯信息的下邊顯示了abc,你看到的可能是類似下邊的情況:
Warning: include(test1aaa.php) [function.include]: failed to open stream: No such file or directory in D:\WebSite\test.php on line 2Warning: include() [function.include]: Failed opening ‘test1aaa.php’ for inclusion (include_path=’.;C:\php5\pear’) in D:\WebSite\test.php on line 2
abc瀏覽第二個文件,因爲沒有找到test999.php文件,我們看到了報錯信息,但是,報錯信息的下邊沒有顯示abc,你看到的可能是類似下邊的情況:
Warning: require(test1aaa.php) [function.require]: failed to open stream: No such file or directory in D:\WebSite\test.php on line 2Fatal error: require() [function.require]: Failed opening required ‘test1aaa.php’ (include_path=’.;C:\php5\pear’) in D:\WebSite\test.php on line 2
現在就能很清楚的知道include和require的區別:include引入文件的時候,如果碰到錯誤,會給出提示,並繼續運行下邊的代碼,require引入文件的時候,如果碰到錯誤,會給出提示,並停止運行下邊的代碼。
-
-
include_once和require_once:
- include_once:使用include_once會在導入文件前先檢測該文件是否在該頁面的其他部分被應用過,如果有,則不會重複引用該文件,程序只能引用一次。(要導入的文件中存在一些自定義函數,那麼如果在同一個程序中重複導入這個文件,在第二次導入時便會發生錯誤,因爲php不允許相同名稱的函數被重複聲明)
- require_once:require_once語句是require語句的延伸,他的功能與require語句基本一致,不同的是,在應用require_once時,先會檢查要引用的文件是不是已將在該程序中的其他地方被引用過,如果有,則不會在重複調用該文件。(同事使用require_once語句在同一頁面中引用了兩個不同的文件,那麼在輸出時,只有第一個文件被執行,第二個引用的文件則不會被執行)
- include_once語句在腳本執行期間調用外部文件發生錯誤時,但不會影響程序向下運行。而require_once語句則會出現一個致命的錯誤,用途都是確保一個被包含的文件只能被包含一次,使用這兩個語句可以防止意外的多次包含相同的數據庫,從而導致函數的重複定義併產生錯誤。
- 在php中使用require_once/include_once雖然方便,但是代價昂貴,據測試數據來看,require_once比require慢3-4倍,所以在php開發中,我們應該儘量使用require/include。
-
用class_exists或者function_exists檢查一下,確認沒有載入過再出手,至少比require_once能快上3倍。php4也可以用上。class_exists('MyClass') or requir('/path/MyClass.class.php');
-
php5可以使用__autoload來避免require,用__autoload之後比 require_once然後再實例化大概要快3倍左右,並且是動態加載。
-
爲了減少與其它第三方類庫產生衝突的可能,建議不要直接使用__autoload,而是使用spl_autoload_register(PHP 5 >= 5.1.0RC1)
參考鏈接 - https://blog.csdn.net/u011598153/article/details/34087141
- https://blog.csdn.net/weixin_40910753/article/details/79398279
- https://blog.csdn.net/zy994914376/article/details/7565339
php include() require() require_once() 整理說明
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.