Code Dive

PHPの include と require の違いについて

February 25, 2020

PHPで外部モジュールを読み込む際に利用する include, require の違いです。

include と require の使い分けまとめ

指定したモジュールが存在しない場合の挙動が異なります。

  • include の場合、Warning になりスルーされる。
  • require の場合、Fatal error となり処理が終了する。

外部モジュールを読み込んだ後の処理が、外部モジュールに依存しているかどうかによって使い分けましょう。

依存していない場合は include、依存している場合は require です。 基本的にはrequireでいいかと思います。

include と require の実際の挙動を検証してみる

以下のコードを実行して、実際の挙動を確認してみます。

<?php

include('foo');
require('bar');
echo 'Hello';
$ php index.php
Warning: include(foo): failed to open stream: No such file or directory in /Users/shootacean/github.com/shootacean/sandbox/php/include-require/index.php on line 3

Warning: include(): Failed opening 'foo' for inclusion (include_path='.:') in /Users/shootacean/github.com/shootacean/sandbox/php/include-require/index.php on line 3

Warning: require(bar): failed to open stream: No such file or directory in /Users/shootacean/github.com/shootacean/sandbox/php/include-require/index.php on line 5

Fatal error: require(): Failed opening required 'bar' (include_path='.:') in /Users/shootacean/github.com/shootacean/sandbox/php/include-require/index.php on line 5
  • includeでは、Warning となりますが、次の処理へ進むのでrequireが実行されます。
  • requireでは、Fatal error となり処理が終了するので、echo 'Hello';は実行されません。

ビジネスロジックのコアな部分の外部モジュールを利用する際などには、
requireを利用することでモジュール読み込み時点で致命的なエラーに気づくことができます。

ビュー層などの致命的な問題にならない箇所では include でいいかと思います。

以上、PHPの includerequire の挙動の違いについてでした。