プログラミング

PHPでrequireとIncludeの違い

WordPressのソースを読んでいて、require文とInclude文の動作が気になったところなのでPHPの基本として押さえておきたいと思います。

 

どちらも外部のファイルを読み込むという点では同じですが、エラー時の挙動に違いがあるということなのでそれぞれを使ったファイルを作って実際に動かしてみたいと思います。

Include文

こちらは読み込んだファイルでエラーが発生した場合、警告を出しながら処理を継続というものです。

 

実際に動かして動きを確認します。

 

↓以下、hello1.phpとして保存
<?php
cho "Hello World\n";
?>

↓以下、hello2.phpとして保存
<?php
ech "Hello World\n";
?>

↓以下、include.phpとして保存
<?php
include (dirname(__FILE__) . "hello1.php");
include (dirname(__FILE__) . "hello2.php");
echo "実験終了。\n";
?>

 

hello2.phpは本来echoとなるところをechと記述ミスしています。これを動かしてみましょう。ちなみにすべて同じディレクトリに保存してあるのが前提ですので。

 

これを動かすと

 

$php include.php
Hello World
PHP Parse error:  syntax error, unexpected '"Hello World\n"' (T_CONSTANT_ENCAPSED_STRING) in /〇〇/〇〇/plg/PHP/hello2.php on line 2
テスト終了

 

と出力されました。

 

include.phpの2行目にあたるhello1.phpの実行はうまくいっているのでHello Worldと表示されましたが、3行目は構文エラーが吐き出されて実行されていない状態になっています。

 

ふつうならここで止まってしまいそうなんですが、Includeの場合は続けて4行目のecho〜は正常に実行されて「テスト終了」の文字が標準出力されていることが確認できます。

 

require文

それでは先ほどと同じ処理をrequire文に置き換えて実行してみます。

 

vi require.php
<?php
        require(dirname(__FILE__) . "/hello1.php");
        require(dirname(__FILE__) . "/hello2.php");
        echo "テスト終了\n";
?>

 

Includeをrequireに変えただけで他は同じ、保存するディレクトリも同じ場所にしています。こちらを走らせると…

 

Hello World
PHP Parse error:  syntax error, unexpected '"Hello World\n"' (T_CONSTANT_ENCAPSED_STRING) in /home/ryo/plg/PHP/hello2.php on line 2

 

3行目の構文エラーで処理が停止し、4行目のecho〜が実行されていないですね。

 

まとめ

WordPressのソースを見ていて気になったincludeとrequireの違いを体験してみるという今回の実験。簡単な内容だと思いますが再度内容をまとめておくと

  • include文はエラーが発生しても処理を継続(エラーは吐き出す)
  • require文はエラーが発生した時点で処理が停止(こちらもエラーは吐く)

ということになります。

 

ただ、処理の結果としては思ったとおりの内容なのでいいのですがこれらの使い分けに関してははっきり言って理解できていません。

 

PHPの学習を続けていく中でいずれわかる時も来ると思いますので、それまでは「ここが違うんだ」という点だけ押さえておきたいと思います。

 

オススメの記事

-プログラミング
-