Help us understand the problem. What is going on with this article?

【PHP】外部ファイルを読み込む際のrequire、require_once、include、include_onceの使い分け

More than 1 year has passed since last update.

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というファイルを作成してそれぞれ読み込んでみます。

require.php
<?php
$test_require_str = 'hoge';
require_once.php
<?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というファイルを作成し、読み込み時にタイポしてしまった場合のテストをしてみたいと思います。

require.php
<?php
//今回は読み込みテストなので、中身は空にしてあります。
include.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をつける。

上記二つのポイントを抑えて、使い分けしていければいいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away