require文は、C言語のプリプロセッサの #include文の動作と非常に似ており、自分自身を指定したファイルの内容 に置換します。
"URL fopen ラッパー"がPHPで有効な場合(デフォルト設定では有効です)、 ローカルなパス名の代わりにURLを用いてrequire() されるファイルを指定することが可能です。詳細な情報については、 リモートファイルと fopen()を参照下さい。
ファイルの読み込みに関して注意すべき点としては、ファイルが include()またはrequire() される際には、読み込まれるファイルの先頭でPHPモードから抜け HTMLモードになること、読み込み完了時にPHPモードに戻ることがあります。 このため、読み込むファイル中のPHPコードとして実行する必要がある コードは、 有効なPHPの開始タグおよび終了タグ で括る必要があります。
require()は、実際にはPHPの関数ではなく、 むしろ言語構造です。この文は、関数とは異なる規則に従っています。 例えば、require()はファイル内にある制御構造には影響 を受けません。また、この文は値を返しません。 よって、require()コールから返り値を取得しようとすると パース時にエラーとなります。
include()と異なり、require()は その行が実行されない場合でも 常に指定されたファイルを読み込みます。 条件に応じてファイルを読み込みたい場合には、include() を使用して下さい。条件文は、require()には 影響しません。しかし、require()がある行が実行 されない場合、読み込まれるファイル内のコードは実行されません。
同様に、ループ構造はrequire()の動作には影響 しません。読み込まれるファイル内のコードがループに依存している場合でも require()は読み込みを一回しか行いません。
これは、ループ構造の中にrequire文を置き、 各ループ毎に別のファイルの内容を読み込むことができないことを意味します。 これを行うには、include文を使用して下さい。
ファイルがrequire()で読み込まれる際、そのファイ ルに含まれるコードは、require()を実行する行の変 数スコープを継承します。コールする側のファイルのその行で利用可能な 全ての変数が、読み込まれたファイル内で利用可能です。コールする側の ファイルの関数内でrequire()を行う場合、コールさ れるファイルに含まれる全てのコードは、その関数内で定義されているも のとして動作します。
require()で読み込まれたファイルが、fopen ラッパー を用いてHTTP経由でコールされた場合、そして、ターゲットのサーバーが そのターゲットファイルをPHPコードとして解釈する場合、変数は、 HTTP GETを使用している場合と同様にURLリクエストとして require()されたファイルに渡すことが可能です。 直接的な記述ではありませんが、require()でファイル を読み込むのと同様に親ファイルの変数スコープを継承します。 スクリプトは、実際にはリモートサーバーで実行された後、結果はローカ ルスクリプトに読み込まれます。
/* この例は、someserverで .php を処理するように設定されており、.txt に * ついては設定されていないことを仮定しています。また、ここでの'動作す * る'という意味は、変数 $varoneと$vartwoがrequire()で読み込まれたファ * イルで利用であることを意味します。*/ /* 動作しない; file.txt は、someserverで処理されない。 */ require ("http://someserver/file.txt?varone=1&vartwo=2"); /* 動作しない; ローカルファイルシステムの'file.php?varone=1&vartwo=2' * という名前のファイルを探す。 */ require ("file.php?varone=1&vartwo=2"); /* 動作する。 */ require ("http://someserver/file.php?varone=1&vartwo=2"); $varone = 1; $vartwo = 2; require ("file.txt"); /* 動作する。 */ require ("file.php"); /* 動作する。 */ |
PHP 3では、require()されたファイルのグローバルス コープでのみrequire()されたファイル内で return文を実行することが可能です。 ブロック内(括弧{}の中を意味します)では使用することはできません。 しかし、PHP 4では、この機能は廃止されました。この機能が必要な場合、 include()を参照下さい。
include(), require_once(), include_once(), readfile(), virtual()も参照下さい。