PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのincludeステートメント徹底解説!ファイル読み込みの基本から応用まで

はじめに

PHPでは、include文を使うことで、あるファイル内のコードを別のPHPスクリプトから利用できるようになります。この機能により、関数やクラスを一度だけ記述しておき、必要な場所で何度でも呼び出せるため、モジュール化された効率的なプログラム開発が可能になります。

include文は、デフォルトでは現在のフォルダ内を検索し、そこで見つからない場合はphp.iniinclude_path設定で指定されたディレクトリも順に探します。もし対象のファイルが現在のフォルダにもinclude_pathのディレクトリにも存在しない場合、PHPパーサーはE_WARNING(警告)を発行しますが、呼び出し元のスクリプトの実行は続行されます。

また、インクルードされたファイルは、読み込み前に呼び出し元モジュールで定義された変数にアクセスできます。これらの変数はグローバルスコープとして扱われます。

includeの基本的な使い方

次の例では、メインのPHPスクリプトがtest.phpを読み込んでいます。

コード例

<?php
echo "inside main script\n";
$var1=100;
echo "now calling test.php script\n";
include "test.php";
echo "returns from test.php";
?>
//test.php
<?php
$var2=200;
//メインスクリプトの$var1にアクセス
echo $var1+$var2 . "\n";
?>

実行結果

メインスクリプトをコマンドラインから実行すると、次のような結果が出力されます。

inside main script
now calling test.php script
300
returns from test.php

test.php側から、メインスクリプトで定義した$var1にアクセスできていることが分かります。

include失敗時の警告

次の例では、存在しないファイルをincludeしようとしたため、警告が発生します。

コード例

<?php
echo "inside main script\n";
$var1=100;
echo "now calling nosuchfile.php script\n";
include "nosuchfile.php";
echo "returns from nosuchfile.php";
?>

実行結果

実行すると次のような結果になります。警告が出てもプログラムは終了せず、後続の処理がそのまま続行される点に注目してください。

inside main script
now calling nosuchfile.php script
PHP Warning: include(nosuchfile.php): failed to open stream: No such file or directory in line 5
PHP Warning: include(): Failed opening 'nosuchfile.php' for inclusion (include_path='C:\xampp\php\PEAR') in line 5
returns from nosuchfile.php

関数内でのinclude

次の例では、関数の中でtest.phpを読み込んでいます。インクルードされたファイル内のコードは、その関数の一部として扱われるため、ファイル内で定義された変数には関数の外側からアクセスできません。

コード例

//メインスクリプト
<?php
function myfunction(){
    $var1=100;
    include "test.php";
    echo $var1+$var2."\n";
}
myfunction();
echo "variable from included file outside function: $var2";
?>
//test.php(読み込まれる側)
<?php
echo "test.php called from inside function\n";
$var2=200;
return;
?>

実行結果

メインスクリプトをコマンドラインから実行すると、次のような結果が出力されます。

100
test.php called from inside function
PHP Notice: Undefined variable: var2 in C:\xampp\php\testscript.php on line 9
Notice: Undefined variable: var2 in C:\xampp\php\testscript.php on line 9
variable from included file outside function

関数の外で$var2を参照しようとすると「Undefined variable」の通知が表示され、関数内で定義された変数が外部からは見えないことが確認できます。

includeファイルからのreturn

include文は、成功時にTRUE、失敗時にFALSEを返します。さらに、インクルードされるファイル内で明示的に式をreturnした場合、その戻り値を呼び出し元のスクリプトで受け取り、後続の処理に活用することができます。

コード例

//メインスクリプト
<?php
$result=include "test.php"; // 値を返す
echo "return value : $result\n";
$y=include "test1.php"; // returnのみ
echo "return value : $y\n";
$x=include "test2.php"; // return文なし
echo "return value : $x\n";
?>
//test.php
<?php
$var=100;
return $var;
?>
//test1.php
<?php
$var=100;
return;
?>
//test2.php
<?php
$var=100;
?>

実行結果

実行すると次のような結果になります。

return value : 100
return value :
return value : 1

値をreturnした場合はその値が、returnのみの場合は空、return文がない場合は1(TRUE)が返されるという違いが分かります。

補足:includeとrequireの違い

PHPにはincludeとよく似たrequire文も用意されています。両者の違いは、ファイルが見つからなかった場合の挙動です。includeはE_WARNINGを発行して処理を続行するのに対し、requireはE_COMPILE_ERROR(致命的なエラー)を発行し、スクリプトの実行を即座に停止します。設定ファイルや必須ライブラリのように、読み込みが絶対に必要なファイルにはrequireを使うのが推奨されます。

また、同じファイルが誤って複数回読み込まれるのを防ぎたい場合は、include_oncerequire_onceを利用すると便利です。これらの文は、すでに読み込み済みのファイルを再読み込みしないため、関数の再定義エラーなどを回避できます。

  1. php.iniを別の設定ファイルから読み込む方法:--with-config-file-scan-dirオプションの使い方

    php.iniから他の.iniファイルは直接インクルードできないPHPでは、メインとなるphp.iniファイルの中から別の.iniファイルを「include」することはできません。php.ini内に他の設定ファイルへの参照を記述しても、そのファイルは読み込まれない点に注意が必要です。解決策:--with-config-file-scan-dirオプション代わりに利用できるのが、PHPをソースからコンパイルする際に指定する --with-config-file-scan-dir オプションです。configureを実行するときに、以下のように記述します。--with-config-file-sc

  2. HTMLをPHPの「if」文の中に埋め込む方法をわかりやすく解説

    はい、PHPを使えばHTMLを「if」文の中に埋め込むことができます。条件分岐の結果に応じて異なるHTMLを出力したい場面は非常に多く、そのためにいくつかの書き方が用意されています。ここでは代表的な3つの方法を紹介します。 方法1:代替構文(if〜endif)を使う PHPには、コロン「:」と「endif;」を組み合わせた代替構文があります。波括弧「{}」を使わないため、PHPとHTMLが混在するテンプレートでは特に読みやすくなります。 <?php if($condition) : ?>     <a href="http