include文は指定されたファイルを読み込み、 評価します。
ファイルの読み込みに関して注意すべき点としては、 ファイルがinclude()またはrequire() される際には、読み込まれるファイルの先頭でPHPモードから抜け HTMLモードになること、読み込み完了時にPHPモードに戻ることがあります。 このため、読み込むファイル中のPHPコードとして実行する必要がある コードは、 有効なPHPの開始タグおよび終了タグ で括る必要があります。
読み込み処理はinclude文を処理する度に行われます。 このため、異なった複数のファイルを読み込むためにル�×構造の中で includeを使用することができます。
$files = array ('first.inc', 'second.inc', 'third.inc');
for ($i = 0; $i < count($files); $i++) {
include $files[$i];
}
|
include()はrequire()と異なり、 include文が実行される度に再度評価されます。 (そして、実行時に初めて評価されます。)一方、require()文は、 (条件式がfalseであるif 文の中にある場合のように)読み込まれるファイルの内容が評価されるかによらず 最初に処理された際に読み込まれるファイルで置換されます。
include()は特殊な言語構造なので、if構造内 にある時には、命令ブロックとして括っておく必要があります。
/* 以下は誤っており、希望通りに動作しません。 */
if ($condition)
include($file);
else
include($other);
/* 以下が正解です。 */
if ($condition) {
include($file);
} else {
include($other);
}
|
PHP3およびPHP4では共にinclude()されたファイル内で ファイルの実行処理を終了し呼出側のスクリプトに戻るために return文を実行することが可能です。 しかし、動作にはいくつかの違いがあります。まず、PHP3では 関数ブロック以外のブロック内でreturnを 使用することはできません。PHP3では、return が適用っMるのは関数であり、ファイル全体には適用できません。 しかし、PHP4ではこの制限はありません。また、PHP4では include()されたファイルから値を返すことが可能です。 通常の関数と同様にinclude()コールの値を 取得できます。これは、PHP3ではパース時にエラーとなります。
例 11-1. PHP3とPHP4におけるinclude() メインファイルと同じディレクトリに(test.inc という名前の)以下のファイルが存在すると仮定します。
メインファイル(main.html)に以下の文が含まれている 仮定します。
main.htmlがPHP3でコールされた場合、 2行目でパースエラーとなります。つまり、PHP3では include()の値を取得できないのです。 しかし、PHP4では、以下のような結果となります。
ここで、main.htmlを以下のように変えたと 仮定しましょう。
PHP4では、出力は次のようになります。
上のパースエラーは、test.inc内で return文が関数以外のブロックで括られている ためです。returnをブロックの外に移動すると、出力は次のようになります。
偽の'27'はPHP3がファイルからreturnにより値を返すことを サポートしていないことによるものです。 |
include()およびrequire()は共に 実際にターゲットファイルの中身を呼出側のファイル自体に読みこむことに 注意してください。ターゲットをHTTPのようなものを経由してコールする わけではありません。よって、 インクルードされるファイルは効率的に呼出側のファイルの一部になるため、 インクルードされた側のスコープで設定された全ての変数はインクルード されるファイルの中でも自動的に利用可能です。
include( "file.inc?varone=1&vartwo=2" ); /* 動作しません */
$varone = 1;
$vartwo = 2;
include ("file.inc"); /* $varoneおよび$vartwoはfile.incで利用可能です */
|
リモートファイル機能により HTTP経由でrequireやincludeによるファイルの読み込めることと誤解しないで 下さい。その場合は、可能です。
readfile(), require(), virtual() も参照下さい。