include()文は指定されたファイルを読み込み、評価します。
以下の記述内容はrequire()にも当てはまります。これら2つの
構文はエラーの扱い方を除けば、その振る舞いは全く同じです。エラーが発生すると
include()はWarning
を出力しますがrequire()を使用している場合は
Fatal Errorとなります。
言い換えると、指定されたファイルが無い場合に処理を停止したい場合は
require()を使用した方が良い、ということになります。
include()を使用すると、読み込むべきファイルが存在しない
場合も処理が続行されます。include_path
を適切に設定することも忘れないで下さい。
ファイルが読み込まれるとそのファイルに含まれるコードは、
include()もしくはrequire()が実行された
行の変数スコープを継承します。
呼び出し側の行で利用可能である全ての変数は、読み込まれたファイル内で利用可能です。
例 12-3基本的なinclude()の例 vars.php
<?php
$color = 'green';
$fruit = 'apple';
?>
test.php
<?php
echo "A $color $fruit"; // A
include 'vars.php';
echo "A $color $fruit"; // A green apple
?> |
|
呼び出し側のファイルの関数定義の中で読み込みが行われ場合は、読み込まれる
ファイルに含まれる全てのコードは、その関数内で定義されているものとして
動作します。従って変数スコープのその関数のものが継承されます。
例 12-4関数内での読み込み <?php
function foo()
{
global $color;
include 'vars.php';
echo "A $color $fruit";
}
/* vars.php は foo() のスコープを継承するため *
* $fruit はこの関数の外では無効となります。 *
* $color はglobalとして宣言されているため *
* 有効です。 */
foo(); // A green apple
echo "A $color $fruit"; // A green
?> |
|
ファイルが読み込まれるときには、読み込まれるファイルの先頭で
PHPモードを抜けてHTMLモードになり、最後に再びPHPモードに戻ります。
このため、読み込むファイル中のPHPコードとして実行する必要がある
コードは、
有効なPHPの開始タグおよび終了タグで括る必要があります。
"URL fopenラッパー"が
有効になっている場合(デフォルト設定では有効です)、ローカルなパス名
の代わりにURL(HTTP経由)を用いて読み込むファイルを指定することが可能です。
URLで指定されたサーバがファイルをPHPコードとして解釈することが
出来る場合には、HTTP GETを使用してURLリクエストに引数を指定することが
出来ます。これはファイルの読み込み云々やスコープの継承とは関係なく、
ただ単純にスクリプトがリモートのサーバで実行されて結果がローカルの
スクリプトに読み込まれる、というだけのことです。
警告 |
Windows版のPHPは、現在この関数に関してリモートファイルアクセス機能をサポートしていません。これは、allow_url_fopenを有効にした場合でも同様です。 |
例 12-5HTTP経由のinclude() <?php
/* この例は www.example.com が.phpはPHPスクリプトとして扱い、.txtは通常の *
* ファイルとして扱うように設定されていると仮定しています。また、ここでの *
* '動作します'という言葉の意味は、変数$fooと$barが読み込まれる側のファイ *
* ルで使用可能である、ということです。 */
// 動作しません: www.example.com では file.txt はPHPコードとして解釈されません。
include 'http://www.example.com/file.txt?foo=1&bar=2';
// 動作しません: 'file.php?foo=1&bar=2' という名前のファイルをローカルファイル
// システム上から探し出そうとします。
include 'file.php?foo=1&bar=2';
// 動作します。
include 'http://www.example.com/file.php?foo=1&bar=2';
$foo = 1;
$bar = 2;
include 'file.txt'; // Works.
include 'file.php'; // Works.
?> |
|
リモートファイル,
fopen(),
file()も参照してください。
include()とrequire()は特殊な
言語構造であるため、条件構造内にある場合は命令ブロックとして
括っておく必要があります。
例 12-6include() と 条件ブロック <?php
// これは誤っており希望した通りには動作しません。
if ($condition)
include $file;
else
include $other;
// これが正解です。
if ($condition) {
include $file;
} else {
include $other;
}
?> |
|
値の返し方: 読み込まれたファイル内では、ファイルの実行処理を終了し呼出側の
スクリプトに戻るためにreturn()文を実行することが可能です。
同時に値を返すことや、通常の関数と同様に呼び出しの値を取得することも出来ます。
注意
PHP 3では関数ブロック以外のブロック内でreturnを 使用することはできません。
return()が適用されるのは関数であり、ファイル全体ではありません。
例 12-7include()とreturn()文 return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$foo = include 'return.php';
echo $foo; // 'PHP'と出力されます
$bar = include 'noreturn.php';
echo $bar; // 1が出力されます
?> |
|
読み込みが成功すると$barの値は1となります。上の2つの例の違いに
注目してください。最初の例では読み込まれるファイル側でreturn()
を使用し、もう一方では使用していません。ファイルを"読み込む"ための他の方法としては
fopen()やfile()、そして
include()を出力制御関数
と共に使用する方法があります。
require(), require_once(),
include_once(), readfile(),
virtual(),
include_pathも参照してください。