require()
require() ステートメントには、指定されたファイルが含まれて実行されます。
require() ステートメントは、指定されたファイルをインクルードして実行します。インクルードの仕組みの詳細については、include() のドキュメントを参照してください。
require() と include() は、失敗の処理方法を除いて、あらゆる点で同一です。 include() は警告を生成し、require() は致命的なエラーを引き起こします。言い換えれば、ファイルが見つからない場合にページの処理を停止したい場合は、ためらわず require() を使用してください。 include() の場合はそうではなく、スクリプトは引き続き実行されます。また、適切な include_path が設定されていることを確認してください。
例 16-2. 基本的な require() の例
「prepend.php」が必要;
$somefile が必要;
require ('somefile.txt');
?>
その他の例については、 include() のドキュメントを参照してください。
注: PHP 4.0.2 より前では、次のルールが適用されていました。require() は、ファイルが含まれている行がまったく実行されない場合でも、常にターゲット ファイルの読み取りを試みます。条件文は require() には影響しません。ただし、require() が配置されている行が実行されない場合、ターゲット ファイル内のコードは実行されません。同様に、ループ構造は require() の動作に影響を与えません。オブジェクト ファイルに含まれるコードは依然としてループの本体ですが、require() 自体は 1 回だけ実行されます。
注: これは関数ではなく言語構造であるため、「変数関数」から呼び出すことはできません。
含む()
include() ステートメントは、指定されたファイルをインクルードして実行します。
次のドキュメントは require() にも適用されます。 2 つの構造は、障害の処理方法を除いて同一です。 include() は警告を生成し、require() は致命的なエラーを引き起こします。つまり、ファイルが見つからない場合にページの処理を停止したい場合は、require() を使用します。 include() の場合はそうではなく、スクリプトは引き続き実行されます。また、適切な include_path が設定されていることを確認してください。
ファイルがインクルードされると、そのファイルに含まれるコードはインクルード行の変数スコープを継承します。その時点から、呼び出し側ファイルのその行で使用可能な変数は、呼び出されたファイルでも使用できるようになります。
例 16-3. 基本的な include() の例
vars.php
$color = '緑';
$fruit = 'リンゴ';?>
test.php
echo "a $color $fruit" // a
;「vars.php」をインクルードします;
echo "a $color $fruit" // 緑のリンゴ
;?>
呼び出し元ファイルの関数内に include が含まれている場合、呼び出されたファイルに含まれるすべてのコードは、その関数内で定義されているかのように動作します。したがって、その関数の変数スコープに従います。
例 16-4. 関数にインクルードする
ファイルがインクルードされると、パーサーはターゲット ファイルの先頭で php モードを終了して html モードに入り、ファイルの末尾で再開します。このため、PHP コードとして実行されるオブジェクト ファイル内のコードは、有効な PHP 開始タグと終了タグ内に含める必要があります。
関数 foo()
{
グローバル $color;「vars.php」をインクルードします;
"$color $fruit" をエコーします;
}/* vars.php は foo() のスコープ内にあるので *
foo(); echo "$color $fruit" // 緑
* $fruit はこれ以外では利用できません *
* スコープ。 $color は宣言したためです *
* グローバルとして。;
?>
「url fopen ラッパー」が php でアクティブ化されている場合 (デフォルト設定)、ローカル ファイルの代わりに、含めるファイルを URL (http またはその他のサポートされているラッピング プロトコル経由 - サポートされているプロトコルについては付録 l を参照) を使用して指定できます。ターゲット サーバーがターゲット ファイルを PHP コードとして解釈する場合は、http get の URL リクエスト文字列を使用して、インクルードされたファイルに変数を渡すことができます。厳密に言うと、これはファイルをインクルードして親ファイルの変数スペースを継承することと同じではありません。スクリプト ファイルは実際にはリモート サーバー上で実行され、ローカル スクリプトにはその結果がインクルードされます。
バージョン 4.3.0 より前の Windows バージョンの PHP は、allow_url_fopen オプションがアクティブ化されている場合でも、この関数によるリモート ファイル アクセスをサポートしません。
例 16-5. http 経由の include()
/* この例では、www.zhutiai.com が .php を解析するように設定されていることを前提としています *
また、ここでの「動作」とは、変数 *
を意味します。
* $foo と $bar は、同梱のファイル内で使用できます。
として処理されませんでした。
'http://www.example.com/file.txt?foo=1&bar=2' を含めます;
で 'file.php?foo=1&bar=2' という名前のファイルを検索します。
// ローカル ファイルシステム
include 'file.php?foo=1&bar=2';
'http://www.example.com/file.php?foo=1&bar=2' を含めます;
$bar = 2;
include 'file.txt' // 動作します
;
include 'file.php' // 動作します
;
関連情報については、リモート ファイルの使用、fopen() および file() を参照してください。
例 16-6. include() と条件文グループ
// これは間違っており、期待通りに動作しません。if ($condition)
$file をインクルードします;
それ以外
$other を含める;
// これは正しいです。
?>
if ($condition) {
$file をインクルードします;
} その他 {
$other を含める;
}
戻り値の処理: インクルードされたファイル内で return() ステートメントを使用すると、ファイル内のプログラムの実行を終了し、それを呼び出したスクリプトに戻ることができます。インクルードされたファイルから値を返すことも可能です。 include呼び出しの戻り値は通常の関数と同様に取得できます。
注: PHP 3 では、関数内で呼び出さない限り、return をインクルードされたファイルに含めることはできません。この場合、return() はファイル全体ではなく関数に作用します。
例 16-7. include() および return() ステートメント
$var = 'php';$var を返す;
?>
noreturn.php
$var = 'php';
?>
testreturns.php
$foo = 'return.php' を含めます;
echo $foo // 'php' を出力します
$bar = 'noreturn.php' を含めます;
echo $bar // 1 を出力します
?>
include が正常に実行されたため、$bar の値は 1 です。上の例の違いに注目してください。 1 つ目はインクルードされたファイルで return() を使用し、もう 1 つは使用しません。ファイルを変数に「含める」他の方法としては、fopen()、file()、または include() を出力制御関数と組み合わせて使用する方法があります。
require_once()
require_once() ステートメントには、スクリプトの実行中に指定されたファイルが含まれ、実行されます。この動作は require() ステートメントに似ていますが、唯一の違いは、ファイル内のコードが既にインクルードされている場合、再度インクルードされないことです。このステートメントがどのように機能するかについては、require() のドキュメントを参照してください。
require_once() と include_once() の使用例については、最新の PHP ソース プログラム配布パッケージの pear コードを参照してください。
注: require_once() は php 4.0.1pl2 の新機能です。
注: require_once() と include_once() は、大文字と小文字を区別しないオペレーティング システム (Windows など) では期待どおりに動作しない可能性があることに注意してください。 例 16-8. require_once() は Windows では大文字と小文字が区別されません
require_once("a.php"); // これには a.php が含まれます
警告
バージョン 4.3.0 より前の Windows バージョンの PHP は、allow_url_fopen オプションがアクティブ化されている場合でも、この関数によるリモート ファイル アクセスをサポートしません。
include_once() ステートメントは、スクリプトの実行中に指定されたファイルをインクルードし、実行します。この動作は include() ステートメントに似ていますが、唯一の違いは、ファイル内のコードが既にインクルードされている場合、再度インクルードされないことです。このステートメントの名前が示すように、このステートメントは 1 回だけ含まれます。
require_once() と include_once() の使用例については、最新の php ソース プログラム配布パッケージの pear コードを参照してください。
注: include_once() は php 4.0.1pl2 で新たに追加されました。
注: include_once() と require_once() は、大文字と小文字を区別しないオペレーティング システム (Windows など) では期待どおりに動作しない可能性があることに注意してください。 例 16-9. include_once() は Windows では大文字と小文字が区別されません
include_once("a.php"); // これには a.php が含まれます
include_once("a.php"); // これにより、Windows に a.php が再度インクルードされます!
?>
警告
バージョン 4.3.0 より前の Windows バージョンの PHP は、allow_url_fopen オプションがアクティブ化されている場合でも、この関数によるリモート ファイル アクセスをサポートしません。