最後更新:2016-06-01
來源:互聯網
上載者:User
關鍵字
控制
流程
手冊
使用者
require
檔案
一個
包含
手冊
TABLE border=0 cellPadding=0 cellSpacing=0 height="100%" width="100%">
require() require() 語句用它指定的檔案代替它自己,這很像C中的預先處理#include 的功能。
如果在PHP中"URL fopen wrappers"項是開啟的(這是預設的配置),你可以在require()中使用URL代替本地路徑。更多的資訊參見Remote files和fopen()。
一個重要的提示是:當一個檔案被include()或require()時,是怎樣工作的,從目標檔案開始分析PHP模組和HTML模組的點滴,在結束時重新摘要PHP模組。
前提是,有一些被有效地PHP開始和結束標籤包含著的可執行檔PHP代碼在檔案中。
require() 實際上不是一個PHP函數:正確的說,它是一個語言的構成部分。它的規則與函數有一些不同。如,require() 不會受包含控制結構的控制。另外,它不會返回任何值;嘗試從require()調用中讀取一個傳回值的結果是解析錯誤。
不同的是include(), require() 將總是讀目標檔案,即使它沒有可執行檔行。如果你想有條件的包含一個檔案,請使用include()。條件陳述式不會影響require()。 可是,if the line on which the require() occurs is not executed, neither will any of the code in the target file be executed.
類似的,迴圈控制也不會影響require()的行為。 儘管包含檔案仍然受迴圈的控制,但是require() 只執行一次。
這意味著,你不能把require() 語句放在一個迴圈語句中,期待著它能在每一次迴圈中包含不同的檔案。要這樣做,請使用include() 語句。
require ('header.inc');
當一個檔案被require()包含時, 包含著的代碼將繼承發生require() 那行的變數範圍。在調用檔案行的任何可用變數在被調用檔案中都將可用。如果require() 發生在正在調用檔案中的函數裡,這時被調用檔案中的全部代碼就好像已經被定義在了函數中一樣。
如果require()包含的檔案是經過HTTP使用fopen開啟的,如果目標伺服器能作為PHP代碼解析目標檔案,變數可以使用帶有URL的有HTTP GET請求字串的require()傳遞。嚴格的說require()一個檔案和繼承它的父檔案的變數範圍是不同的:這個指令碼實際上是運行在遠程伺服器上,在本地指令碼中包含的是它的結果。
/* 這人例子假設someserver已經配置了.php的解析而不是.txt檔案。 * 同樣,'works' 意味著被包含檔案中的變數$varone 和$vartwo 是可用的*/
/* Won't work; file.txt wasn't handled by someserver. */ require ("http://someserver/file.txt?varone=1&vartwo=2");
/* Won't work; looks for a file named 'file.php?varone=1&vartwo=2' * on the local filesystem. */ require ("file.php?varone=1&vartwo=2");
/* Works. */ require ("http://someserver/file.php?varone=1&vartwo=2");
$varone = 1; $vartwo = 2; require ("file.txt"); /* Works. */ require ("file.php"); /* Works. */
在PHP 3中,只要語句在被require()檔案的全域範圍內發生,被require() 的檔案可能執行一個return 語句。不可以發生在任何塊(大括弧中)的內部。在PHP 4中,這人功能已被停止。如果你需要這樣的功能,參見include()。
參見 include(), require_once(), include_once(), readfile(), 和 virtual().