PHP include()和require()方法的區別

PHP的include()和require()是兩種包含外部文件的方法,對於這兩種方法有什麼區別,不少初學者可能不是很明白。下面總結一下PHP include()和require()的區別:php

1:加載失敗的處理方式不一樣:html

include()會產生一個警告,而require()則致使一個致命的錯誤(出現錯誤,腳本中止執行)編程

require() :若是文件不存在,會報出一個fatal error.腳本中止執行ide

include() : 若是文件不存在,會給出一個 warning,但腳本會繼續執行函數

這裏特別要注意的是:使用include()文件不存在時,腳本繼續執行,這種狀況只出如今PHP 4.3.5以前性能

推薦使用require_once()和include_once(),能夠檢測文件是否有重複包含。測試

2.php性能ui

對include()來講,在 include()執行時文件每次都要進行讀取和評估;spa

而對於require()來講,文件只處理一次(實際上,文件內容替換了require()語句)。.net

這就意味着若是有包含這些指令之一的代碼和可能執行屢次的代碼,則使用require()效率比較高。

另外一方面,若是每次執行代碼時相讀取不一樣的文件,或者有經過一組文件疊代的循環,就使用include(),

由於能夠給想要包括的文件名設置一個變量,當參數爲include()時使用這個變量。

3.二種方式提供不一樣的使用彈性。

require 的使用方法如 require("./inc.php"); 。一般放在 PHP 程式的最前面,PHP 程式在執行前,就會先讀入 require 所指定引入的檔案,使它變成 PHP 程式網頁的一部份。

include 使用方法如 include("./inc/.php"); 。通常是放在流程控制的處理區段中。PHP 程式網頁在讀到 include 的檔案時,纔將它讀進來。這種方式,能夠把程式執行時的流程簡單化。

require即便在條件位FALSE的時候也會被包含,而include只會在執行到改位置時候纔會去執行。

require_once() 語句在腳本執行期間包括並運行指定文件。此行爲和 require() 語句相似,惟一區別是若是該文件中的代碼已經被包括了,則不會再次包括。require_once()函數的做用和 require() 是幾乎相同的

include_once() 語句在腳本執行期間包括並運行指定文件。此行爲和 include() 語句相似,惟一區別是若是該文件中的代碼已經被包括了,則不會再次包括。include_once()函數的做用和 include() 是幾乎相同的

require_once的做用是會檢查以前是否加載過該文件,若是沒有加載則加載 若是加載過就再也不次加載,好比某文件定義了一個類型 若是兩次加載該文件會出現錯誤


還信誓旦旦的解釋:include()是有條件包含函數,而require()則是無條件包含函數。

可是這是好久以前的事了,如今的php,require與include確實有區別,筆者測試的是5.3以上版本測試結果以下:

發現這兩種結構除在性能和在如何處理包含失敗以外,其餘徹底同樣。

1.在性能方面

測試發現當require與include在性能方面差異不大,以爲這方面能夠不用考慮(多是我測試的樣例不夠多吧)

eg:

[php]  view plain  copy
  1. <pre name="code" class="php">$startTime=time();  
  2. $startMemoryUsed=memory_get_usage();    
  3. require "a1.inc";  
  4. $endMemoryUsed=memory_get_usage();  
  5. $endTime=time();  
  6. $usedMemory=($endMemoryUsed-$startMemoryUsed)/1024;   
  7. print_r($usedMemory);//1.6171875  
  8. echo '</br>';  
  9. print_r($endTime-$startTime);  
  10.   
  11. /*$startTime=time(); 
  12. $startMemoryUsed=memory_get_usage();   
  13. include "a1.inc"; 
  14. $endMemoryUsed=memory_get_usage();   
  15. $endTime=time(); 
  16. $usedMemory=($endMemoryUsed-$startMemoryUsed)/1024;  
  17. print_r($usedMemory);//1.6171875 
  18. print_r($endTime-$startTime);*/  
 
 

2.在包含錯誤處理方面

   在包含失敗 時,include()產生一個警告並繼續執行,而require()則致使一個致命錯誤。換句話說,若是想在遇到丟失文件時中止處理頁面就用 require(),不然就用include()

[php]  view plain  copy
  1. include "a9.inc";//<span style="font-family: Arial, Helvetica, sans-serif;">a9.inc不存在會產生一個警告</span>  
  2.   
  3. require "a10.inc";//a10.inc不存在會產生一個致命錯誤  

補充:include,require包含做用域

文件a2.inc

[php]  view plain  copy
  1. $name="lidquan";  
  2. class Teacher{  
  3.     public function show(){  
  4.         echo 'my job is teacher</br>';  
  5.     }  
  6. }  
  7. function showName(){  
  8.     echo 'a2.inc 裏面的方法';  
  9. }  

文件 index.php

[php]  view plain  copy
  1. function a(){  
  2.     require "a2.inc";  
  3.     $teacher =new Teacher();  
  4.     $teacher->show();  
  5. }  
  6.   
  7. a();//正常調用  
  8.   
  9. showName();//正常調用  
  10.   
  11. var_dump($name);//提示$name沒有定義  

結果截圖以下:


關於包含文件後做用域問題總結以下:

1.全部在被包含文件中定義的函數和類在被包含後,在包含文件裏都具備全局做用域

2.被包含文件的變量的做用域,隨着包含位置的變化而變化。好比若是是在函數中包含,被包含文件的變量是局部變量

備註:搞編程,要有一顆嚴謹負責的心


以上就是PHP include()和require()方法的區別。

相關文章
相關標籤/搜索