require() 語句的性能與 include() 相類似,都是包括並運行指定文件。除了處理失敗的方式不同之外。require 在出錯時產生 E_COMPILE_ERROR 級別的錯誤,終止腳本運行;而include 只產生警告(E_WARNING),腳本會繼續運行。
【1】include和require都是語句結構(並不是函數)!!!
在php官網手冊上是划分到了流程控制,這兩個語句結構不是函數。
詳情可參考http://php.net/manual/zh/function.include.php
所以,它可以不加圓括號,直接加引號來包含文件。我習慣不加圓括號。
1 include '01_var.php'; 2 或者 3 include('01_var.php'); 4 或者 5 require '01_var.php'; 6 或者 7 require('01_var.php');
2】對於處理失敗的方式不同(最主要的區別)
對於引入的文件找不到情況下。(這里確保當前文件夾下面不存在no.php)
在01_include_require文件下編寫如下代碼:
include 'no.php'; echo 'End!';//會輸出
include 生成一個警告(E_WARNING),在錯誤發生后腳本會繼續執行。
1 require 'no.php'; 2 echo 'End!';//不會輸出
require 生成一個致命錯誤(E_COMPILE_ERROR),在錯誤發生后腳本會停止執行。
【3】對include和require引入文件的實質
對 include() 語句來說,在執行文件時每次都要進行讀取和評估;
對於 require() 來說,文件只處理一次(實際上,文件內容替換 require() 語句)這就意味着如果可能執行多次的代碼,則使用 require() 效率比較高。
另外一方面,如果每次執行代碼時是讀取不同的文件,或者有通過一組文件迭代的循環,就使用 include() 語句。
【4】include_once和require_once的作用
使用方法與不加后綴一樣,加上_once后綴 意味着如果該文件中的代碼已經被包括進來了,就不會再次包括。因為有些情況下,在腳本執行期間,同一個文件有可能包含超過一次的情況下,為了確保只包含一次,避免函數重定義,或者是變量的重新賦值的問題。
【5】使用場景
[1]如果您希望繼續執行,並向用戶輸出結果,即使包含文件已丟失,那么請使用 include。
[2]在框架復雜的 php 應用程序編程中,請始終使用 require 向執行流引用關鍵文件。這有助於提高應用程序的安全性和完整性,在某個關鍵文件意外丟失的情況下。包含文件省去了大量的工作。例如在thinkphp框架index入口引入核心代碼就是利用require引入的。
[3]require通常放在php腳本程序最前面,php再執行程序前,就會先讀取require語句引入的文件,使之成為php腳本文件的一部分。
[4]include 通常用在流程控制的處理部分中,php 腳本在讀到 include 的文件時,才將它讀進來。這種方式,可以把程序執行時的流程簡單化。
總結:
1. require, include 遇到錯誤時處理不同,require出錯時,腳本將停止運行,而在使用include的情況下,腳本將繼續執行;
2. 無論require的位置如何,制定文件都將包含到出現require的腳本中。例如,即使require放在計算結果為假的if語句中,依然會包含指定文件。所以使用條件包含時,需要用include;
3. 帶有后綴 _once ,功能和不帶后綴的相同。
include_once()函數的作用與include相同,不過它會首先驗證是否已經包含了該文件。如果已經包含,則不再執行include_once。否則,則必須包含該文件。除了這一點與include完全相同。
require_once函數確保文件只包含一次。在遇到require_once后,后面再試圖包含相同的文件時將被忽略。(隨着網站越來越大,可能會出現重復包含某些文件。這也許不是問題,但又是修改了所包含文件的變量后,卻由於后面再次包含原來的文件而被覆蓋,可能不希望出現這種情況。還可能出現另一個問題,即所包含文件中函數名的沖突。使用require_once就可以解決這些問題。)
