PHP函式include include_once require和require_once的區別
瞭解下include、include_once、require和require_once這4個函式:
- include函式:會將指定的檔案讀入並且執行裡面的程式;
- require函式:會將目標檔案的內容讀入,並且把自己本身代換成這些讀入的內容;
- include_once 函式:在指令碼執行期間包含並執行指定檔案。此行為和 include 語句類似,唯一區別是如果該檔案中已經被包含過,則不會再次包含。如同此語句名字暗示的那樣,只會包含一次;
- require_once 函式:和 require 語句完全相同,唯一區別是 PHP 會檢查該檔案是否已經被包含過,如果是則不會再次包含。
1 include與require的區別
include與require除了在處理引入檔案的方式不同外,最大的區別就是:include在引入不存檔案時產生一個警告且指令碼還會繼續執行,而require則會導致一個致命性錯誤且指令碼停止執行。
<?php include 'no.php'; echo '123'; ?>
如果no.php檔案不存在,echo '123'這句是可以繼續執行的.
你看到的可能是類似下邊的情況:
<?php require 'no.php'; echo '123'; ?>
如果no.php檔案不存在,echo '123'這句是不執行的,在require時就停止了。
你看到的可能是類似下邊的情況:
include()與require()的功能相同,但在用法上卻有一些不同,include()是有條件包含函式,而 require()則是無條件包含函式。
例如在下面的一個例子中,如果變數$somgthing為真,則將包含檔案somefile:
if($something){ include("somefile"); }
但不管$something取何值,下面的程式碼將把檔案somefile包含進檔案裡:
if($something){ require("somefile"); }
2 include與include_once的區別(require與require_once的區別)
include_once (require_once)語句在指令碼執行期間包含並執行指定檔案。此行為和 include (require)語句類似,區別是如果該檔案中的程式碼已經被包含了,則不會再次包含,只會包含一次。include_once(require_once)需要查詢一遍已載入的檔案列表, 確認是否存在, 然後再載入。
<?php require '1.php'; require '1.php'; ?>
這種情況下1.php被包含兩次。
<?php require '1.php'; require_once '1.php'; ?>
這種情況下,第二次包含時,是不會進行包含的。
include(require)與include_once(require_once)的抉擇問題
通常:include_once和require_once會有效能上的下降,因為他需要判斷之前是否包含過。一般情況下,也不太需要去考慮,除非這已經影響到你程式的效能了。
如果使用 APC 儘量也不要用include_once,因為apc.include_once_override配置項沒有很好的被實現(詳情百度)。
注1:Alternative PHP Cache (APC)是一種對PHP有效的開放源高速緩衝儲存器工具,它能夠快取opcode的php中間碼。
require通常使用方法,這個函式通常放在 PHP 程式的最前面,PHP 程式在執行前,就會先讀入 require 所指定引入的檔案,使它變成 PHP 程式網頁的一部份。常用的函式,亦可以這個方法將它引入網頁中。
include通常使用方法,這個函式一般是放在流程控制的處理部分中。PHP 程式網頁在讀到 include 的檔案時,才將它讀進來。這種方式,可以把程式執行時的流程簡單化。
return 在返回引用的時候加上括號不但效率低而且會造成邏輯錯誤。那麼這幾個函式呢?
理論上來說:include和require後面加不加括號對執行結果沒有區別,但是加上括號效率較低,所以後面能不加括號就不加括號。