Both include と require は別の PHP ファイルの内容を現在のファイルにインポート(実行)します。唯一の違いはファイルが見つからない場合の処理方法です: require はファイルが見つからない場合に致命的エラーを発生させますが、include は警告を出すだけで実行を続けます。
<?php
include "config.php"; // if missing → WARNING, script CONTINUES
require "database.php"; // if missing → FATAL ERROR, script STOPS
include → file missing → emits a Warning, execution continues (file's code skipped)
require → file missing → throws a Fatal Error, execution HALTS
アプリケーションが実行に必須なファイル(コアクラス、重要な設定、データベース設定など)には require を使用します — ファイルが見つからない場合に強制的に停止させたい場合です。オプショナルなファイル(例えばサイドバーテンプレート)には include を使用します — ファイルが見つからない場合もページがクラッシュしないようにしたい場合です。
require_once "functions.php"; // include the file ONLY if not already included
include_once "helper.php";
require_once/include_once は、まだインクルードされていない場合のみそのファイルをインポートします — ファイルが複数回インクルードされる可能性がある場合(例えば複数のファイルによって呼び込まれるクラス定義)、「関数/クラスを再宣言できない」エラーを防ぐため必須です。
// included files share the SAME scope and can define functions, classes, variables
// config.php:
$dbHost = "localhost";
// main.php:
require "config.php";
echo $dbHost; // "localhost" — the variable is available
// ❌ old style — manually requiring every class file
require_once "User.php";
require_once "Order.php";
// ✅ modern — Composer AUTOLOADING loads classes on demand automatically
require "vendor/autoload.php"; // one line; classes load when used (PSR-4)
$user = new User(); // User.php loaded automatically
モダン PHP では、クラスに対して手動で require を使用することはほとんどありません — Composer のオートローダーが必要に応じてクラスを読み込みます。ただし、初期化時に一度だけ require "vendor/autoload.php" を使用します。
include と require の違いを理解することは基本的ですが重要な PHP の知識です — PHP ファイルがコードを共有する方法であり、正確性にとって区別が重要です。
キーポイントは失敗時の動作です:必須ファイルには require を使用(重要なファイルが見つからない場合にアプリケーションが素早くはっきりと失敗するため)、オプショナルなファイルには include を使用(重要でないファイルが見つからない場合もページがクラッシュしないようにするため)。
_once バリアントを理解することは実務上ほぼ必須です — クラスまたは関数定義を誤ってインクルードして二重定義する「再宣言できない」エラーの一般的な問題を防ぐためです。
それと同じくらい重要なのは、モダンコンテキストを理解することです: これらの構造は基本的ですが、モダン PHP は手動で各ファイルを require するのではなく、Composer オートローディング(必要に応じてクラスを読み込む)に依存しているため、現在のコードではほとんどの場合一度だけ require "vendor/autoload.php" を実行してオートローディングに任せます。
include/require の仕組み(および各失敗モードが適切な場合)と、モダンオートローディングが手動インクルードにどのように取って代わるのかの両方を理解することは、古いコードベースから新しいコードベースまで PHP コードベースで作業するための日々の知識です。