PHPで外部ファイルを読み込む場合、require、require_once、include、include_onceなどで読み込めますが、それぞれどういう違いがあるのか備忘録的に書いていこうと思います。
require
require は include とほぼ同じですが、失敗した場合に E_COMPILE_ERROR レベルの致命的なエラーも発生するという点が異なります。 つまり、スクリプトの処理がそこで止まってしまうということです。一方 include の場合は、警告 (E_WARNING) を発するもののスクリプトの処理は続行します。
参照元:PHP: require - Manual
requireは指定されたファイルが読み込めない場合、Fatal Error(致命的なエラー)となり処理が停止されます。
require_once
require_once 文は require とほぼ同じ意味ですが、 ファイルがすでに読み込まれているかどうかを PHP がチェックするという点が異なります。 すでに読み込まれている場合はそのファイルを読み込みません。
参照元:PHP: require_once - Manual
require_onceはrequireと似ていますが、ファイルがすでに読み込まれている場合は再読み込みはしません。
include
include は、ファイルを見つけられない場合に warning を発行します。一方 require の場合は、同じ場合に fatal error を発行する点が異なります。
参照元:PHP: include - Manual
includeは指定されたファイルが読み込めない場合、Warning(警告)となりますがその先の処理はそのまま行われます。
include_once
include_once 命令は、スクリプトの実行時に指定 したファイルを読み込み評価します。この動作は、 include 命令と似ていますが、ファイルからのコー ドが既に読み込まれている場合は、再度読み込まれないという重要な違い があります。また、include_once は TRUE を返します。その名が示す通り、ファイルは一度しか読み込まれません。
参照元:PHP: include_once - Manual
include_onceはincludeと似ていますが、ファイルがすでに読み込まれている場合は再読み込みはしません。
requireとrequire_onceを実際に書いて比べてみる
require.phpとrequire_once.phpというファイルを作成してそれぞれ読み込んでみます。
<?php
$test_require_str = 'hoge';
<?php
$test_require_once_str = 'hoge';
作成したファイルを読み込む
<?php
require 'require.php';
echo $test_require_str.PHP_EOL; //出力結果はhoge
require_once 'require_once.php';
echo $test_require_once_str.PHP_EOL; //出力結果はhoge
//変数の値をそれぞれ変更してみる
$test_require_str = 'hoge_change';
$test_require_once_str = 'hoge_change';
//requireでの読み込みなので、通常通り読み込まれ変数の値が再度変更される
require 'require.php';
echo $test_require_str.PHP_EOL; //出力結果はhoge
//require_onceでの読み込みなので、2回目は読み込まれず変数の値は変更されない
require_once 'require_once.php';
echo $test_require_once_str.PHP_EOL; //出力結果はhoge_change
requireとincludeを実際に書いて比べてみる
今度は、require.phpとinclude.phpというファイルを作成し、読み込み時にタイポしてしまった場合のテストをしてみたいと思います。
<?php
//今回は読み込みテストなので、中身は空にしてあります。
<?php
//今回は読み込みテストなので、中身は空にしてあります。
require.phpの読み込みに失敗した場合
<?php
//require.phpのeを書き忘れて読み込み失敗した場合
require 'requir.php'; //この時点でエラーになり、処理が停止される
include 'include.php';
//処理が停止されているので、当然出力されない
echo 'ファイルの読み込みをしました。';
include.phpの読み込みに失敗した場合
<?php
require 'require.php';
//include.phpのeを書き忘れて読み込み失敗した場合
include 'includ.php';
//Warningにはなりますが、処理は停止されないので出力される
echo 'ファイルの読み込みをしました。';
まとめ
以上、PHPで外部ファイルを読み込む際の構文について書いてみました。
ポイント
- ファイルが読み込めない場合に処理を停止する場合はrequireを使用する。
- 一度しか読み込まなくていいものは_onceをつける。
上記二つのポイントを抑えて、使い分けしていければいいと思います。