2009-09-03 61 views
2

我包括一個文件init.php定義路徑常量。所以,如果我有的init.php在一個文件中(的index.php),然後在另一個文件(佈局/ header.php文件)......是的init.php被添加到這些文件或之前解析它被添加到父文件,然後父文件被作爲一個整體進行分析?PHP解析包括

編輯:爲什麼這很重要是因爲init.php定義路徑變量相對於它被解析的位置。

回答

3

實際上includerequire是相同的除了require將失敗與E_ERRORinclude將發出警告。而且這兩個語句只有在腳本內部實際執行時纔會被激活。所以,下面的代碼將始終工作:

<?php 
echo "Hello world"; 
if (0) require "non_existing.php"; 

回答你的問題是,index.php將首先被解析和執行。然後當include "init.php"遇到文件init.php被解析並在當前範圍內執行。對於layout/header.php也是如此 - 它將首先被解析。

如前所述init.php將被解析,每次include/require被稱爲執行,所以你可能會想使用include_oncerequire_once

3

認爲它被複制粘貼到文件所在的位置。如果你不想讓你的東西重新定義,請使用require_onceinclude_once


有包括.php.txt之間沒有差別。你可以在一個.txt文件中包含php,只要你有<?php打開標籤,它就會被解析。

0

這取決於您是否使用includerequire。隨着include被包含的文件的文本內容被添加到父項,然後整個事情被解析。使用require首先解析包含的文件,並將其內容提供給運行時,然後處理繼續解析包含文件的其餘部分。

如果您想確保init文件僅在請求的運行時中加載一次,那麼請使用require_once來確保僅在一次調用它時纔會對其進行解析。在任何需要它的常量的地方嘗試加載init文件是一個好主意,但使用require_once可以確保在需要時不會再解析它。

+1

pingw33是正確的 - 'require'和'include'只在失敗的嚴重程度上延遲。 – Guss 2009-09-04 00:24:53

+0

也沒有執行文本包含,每個php文件都按原樣解析。 – pingw33n 2009-09-04 01:19:21