1. 程式人生 > >PHP函式include include_once require和require_once的區別

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後面加不加括號對執行結果沒有區別,但是加上括號效率較低,所以後面能不加括號就不加括號。