require文は、C言語のプリプロセッサの #include文の動作と非常に似ており、自分自身を指定したファイルの内容 に置換します。
ファイルの読み込みに関して注意すべき点としては、 ファイルがinclude()またはrequire() される際には、読み込まれるファイルの先頭でPHPモードから抜け HTMLモードになること、読み込み完了時にPHPモードに戻ることがあります。 このため、読み込むファイル中のPHPコードとして実行する必要がある コードは、 有効なPHPの開始タグおよび終了タグ で括る必要があります。
require()は、実際にはPHPの関数ではなく、 むしろ言語構造です。この文は、関数とは異なる規則に従っています。 例えば、require()はファイル内にある制御構造には影響 を受けません。また、この文は値を返しません。 よって、require()コールから返り値を取得しようとすると パース時にエラーとなります。
include()と異なり、require()は その行が実行されない場合でも 常に指定されたファイルを読み込みます。 条件に応じてファイルを読み込みたい場合には、include() を使用して下さい。条件文は、require()には 影響しません。しかし、require()がある行が実行 されない場合、読み込まれるファイル内のコードは実行されません。
同様に、ループ構造はrequire()の動作には影響 しません。読み込まれるファイル内のコードがループに依存している場合でも require()は読み込みを一回しか行いません。
これは、ループ構造の中にrequire文を置き、 各ループ毎に別のファイルの内容を読み込むことができないことを意味します。 これを行うには、include文を使用して下さい。
require ('header.inc');
|
include()およびrequire()は共に 実際にターゲットファイルの中身を呼出側のファイル自体に読みこむことに 注意してください。ターゲットをHTTPのようなものを経由してコールする わけではありません。 読み込まれるファイルは実際に呼出側のファイルの一部になるため、 呼出側のスコープで設定された全ての変数は読み込まれるファイルの中 でも自動的に利用可能です。
require ("file.inc?varone=1&vartwo=2"); /* 動作せず */
$varone = 1;
$vartwo = 2;
require ("file.inc"); /* $varoneと$vartwoはfile.incで利用可能 */
|
リモートファイル機能により HTTP経由でrequireやincludeによるファイルの読み込めることと誤解しないで 下さい。その場合は、可能です。
PHP3では、require()されたファイルのグローバルスコープで のみrequire()されたファイル内で return文を実行することが可能です。 ブロック内(括弧{}の中を意味します)では使用することはできません。 しかし、PHP4では、この機能は廃止されました。この機能が必要な場合、 include()を参照下さい。