PHPのinclude文とrequire文の違い

ライブラリや設定ファイルなどのPHPファイルを読み込むというのは、非常によくあるプログラミングです。

PHPでは、PHPファイルの読み込みにはinclude文やrequire文を使用します。ですが、この2つの違いは一体どこにあるのでしょうか?

参照:PHPでinclude, include_onceを使いファイルを読み込む
参照:PHPでrequire, require_onceを使いファイルを読み込む

includeとrequireの違い

どちらも構文は同じで、別ファイル名を絶対パスか相対パスで指定するだけです。

include "パス";
require "パス";

また、以下のように記述することもできます。

include("パス");
require("パス");

ファイル読み込み失敗時の挙動が異なる

include文とrequire文の違いは、「ファイル読み込み失敗したときにエラーで終了するか警告で継続するか」という点です。

どちらも対象ファイルを読み込みますが、この時ファイルが存在しない、関数で構文エラーなどが起こった場合、それぞれ以下のような挙動となります。

  • require:致命的なエラー(Fatal)となり処理を停止
  • include:警告(Warning)となり処理は継続

includeとrequireどちらのが良いか

どちらが良いかは、実装する内容によって適切な対応が異なると思います。以下に使い分けの例を挙げてみます。

例:コア部分や後の処理に影響する場合はrequire

例えば、バッチ処理など致命傷なエラーにより後続処理の影響が発生する場合には、処理を中断させたいのでrequireを使用します。

例:画面処理などの場合はinclude

画面表示などで表示処理のための計算処理でエラーとなるような場合は、requireだと画面が全く表示されなくなるのを避けるためにincludeを使用するなどの使い分けが考えられます。

実際のプロジェクトに合わせ、それぞれの特性を理解し異常終了させるべき、継続して処理を進めるべきなのか、プログラム全体を鳥瞰しながら見極めていくことが重要となります。


イベント

2017/12/05(火)
Design Thinking Square