includeとinclude_once
そふぃのPHP入門 >> PHP言語リファレンス >> 外部ファイル読み込み >> includeとinclude_once

includeとinclude_once

include文

require文で説明した通り、include文とrequire文の動作は同じです。

どちらも指定したファイルを読み込んで評価します。評価するというのは、実行すると思ってもらっていいです。ファイルに書かれている内容がただのHTMLならそのHTMLをブラウザに出力し、PHPスクリプトならそのスクリプトを実行します。

何が違うかというと、require文は指定したファイルが無い場合などのエラー時にはFatal Errorとして扱われます。つまり、読み込みに失敗した時などには処理が停止してしまうという事です。これに対してinclude文はWarningを出力しますが、処理は続行されます。

つまり、ファイルが無い場合に処理を停止したければrequire文、続行したければinclude文です。

include文も以下のような方法で指定する事ができます。

  1. <?php
  2. include "file.php"; //括弧なし
  3.  
  4. include('somefile.txt'); //括弧付き
  5.  
  6. //もちろんファイルへのパスを変数化することもできます
  7. $somefile = "file.txt";
  8. include $somefile;
  9. ?>

return文の使用

読み込まれるファイル側でreturn文を使用した場合、その時点でファイルの読み込みは終了し、return文の引数値をinclude、include_once、require、require_onceの返り値として返します。

読み込まれるファイル:test.phpの内容

  1. <?php
  2. print "読み込まれる側のファイルからの出力です。<br />\n";
  3. return "読み込み完了しました。";
  4. ?>

とreturnを記述しておくと、読み込む側のファイルで読み込みが成功したかどうか計る事ができます。

  1. <?php
  2. $val = include("test.php");
  3. if($val){
  4.   echo $val;
  5. } else{
  6.   echo "読み込み失敗!!";
  7. };
  8. ?>

出力結果

読み込まれる側のファイルからの出力です。
読み込み完了しました。

この場合、return文には「処理の実行を停止する」という働きがあるのを忘れないで下さい。つまり、return以降の行に処理を記述してもreturnの部分で読み込みが終了してしまうため、それ以降の行は読み込んでくれないという事です。

読み込まれるファイルにreturn文がない場合は整数型の1(読み込み成功時)/論理型のFALSE(読み込み失敗時)を返します。

include_once文

include_once文もrequire_once文と同じで一度だけinculdeする文です。

ファイルがすでに読み込まれている場合は再読み込みをしないという事です。同じファイルが何回も読み込まれると関数の再定義などが起こり、エラーの原因となって困る時があります。(関数は再定義が不可能なのです)。それだけではなく、変数が再代入されて値が変わってしまったり、という事も起こり得ます。

そのような事が起こらないように1回だけ読み込ませるのがinclude_once文です。