PHP 中 include 和 require 的區別詳解

1、概要

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

require() 的使用方法如:

require("myfile.php")

這個語句通常放在 PHP 腳本程序的最前面。PHP 程序在執行前,就會先讀入 require() 語句所引入的文件,使它變成 PHP 腳本文件的一部分。

include() 使用方法和 require 一樣如:

include("myfile.php")

這個語句一般是放在流程控制的處理區段中。

PHP 腳本文件在讀到 include() 語句時,才將它包含的文件讀取進來。這種方式,可以把程式執行時的流程簡單化。

  • incluce 在用到時加載
  • require 在一開始就加載
  • _once 後綴表示已加載的不加載

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

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

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


2、詳解

2.1 報錯

include 引入文件的時候,如果碰到錯誤,會給出提示,並繼續運行下邊的代碼。

require 引入文件的時候,如果碰到錯誤,會給出提示,並停止運行下邊的代碼。

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

test-include.php

include 'test-nothing.php';

echo 'abc';

?>

test-require.php

require 'test-nothing.php';

echo 'abc';

?>

瀏覽 http://localhost/test-include.php,因為沒有找到 test-nothing.php 文件,我們看到了報錯信息,同時,報錯信息的下邊顯示了 abc,你看到的可能是類似下邊的情況:

Warning: include(test-nothing.php) [function.include]: failed to open stream: No such file or directory in D:\www\test-include.php on line 2
Warning: include() [function.include]: Failed opening 'test-nothing.php' for inclusion (include_path='.;C:\php5\pear') in D:\www\test-include.php on line 2
abc

瀏覽 http://localhost/test-require.php,因為沒有找到 test-nothing.php 文件,我們看到了報錯信息,但是,報錯信息的下邊沒 有顯示abc,你看到的可能是類似下邊的情況:

Warning: require(test-nothing.php) [function.require]: failed to open stream: No such file or directory in D:\www\test-require.php on line 2
Fatal error: require() [function.require]: Failed opening required 'test-nothing' (include_path='.;C:\php5\pear') in D:\www\test-require.php on line 2

2.2 文件引用方式

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

PHP 中 include 和 require 的區別詳解


分享到:


相關文章: