1. 程式人生 > >php include,require等4種引入檔案方式的總結

php include,require等4種引入檔案方式的總結

php引入檔案與jsp類似。inlcude();include_once();require();require_once().

 總結一下這4種引入方式。
 include():
    將引入檔案中的程式碼直接載入到目的檔案中(類似複製過來)。這樣在解析時就是目的檔案中有引入檔案的程式碼。
    注意一點,當引入檔案中又引用了其他我檔案時,要注意路徑的變化。此時由於引用檔案中的程式碼被“複製”到了目的檔案中。
    所以引用檔案中的引用檔案的路徑應該是相對與目的檔案的路徑,不在是相對與引用檔案的路徑。include()有返回值,false/true。
 include_once(),與include的不同在與他會檢查引入的檔案在目的溫江中是否已經被引用過。
 如果已經被引用過了,那麼就不再引用(此時include-once不執行)。
 而include則是會繼續引入,不管此前是否引用過。
     也就是非要不可。                  
    而include(包括include_once())則不是,如果檔案沒找到或者沒有正常被引用,程式會繼續執行後面的程式碼。並且這個函式沒有返回值。
   require_once(),與require的不同與前面include與include_once()的不同一樣。會檢查檔案此前是否被引用過。       

這4中方式或者2種方式與php核心有關。include的引用不會去“解釋給核心”,說需要這個檔案,本檔案才能執行。所以就算include的檔案找不到了最多也就是影響涉及到include進來了檔案的程式碼,不會影響本檔案的繼續執行。而require不是,它會通知核心必須要require的檔案,沒有這個檔案,本檔案不能正確執行,所以php核心在執行此檔案時首先就去找require的檔案,如果require的檔案找不到或者引用有問題就會報錯,終止執行。由此也可以看到,require的執行順序要高於include的執行順序。
不過就安全性來說,require要高於include,但是效率卻明顯低於include。

session_start()在有引用檔案中的使用也有變化。
如果不能準確的知道引用的檔案是否也用了session_start()。最好把session_start()換為:

if(isset($_session))
{
   session_start();
}