【PHP】includeの使い方とrequireとの違いを実例で解説
Web開発でよくあるシーンですが、「ヘッダーやフッターの部分を複数ページで共有したい」と思ったことはありませんか?
そんなときに便利なのが、PHPのinclude
です。
includeを使えば、同じコードを複数のファイルで繰り返し書かずに、効率的にコードを再利用できます。
PHPのincludeの使い方
PHPのincludeは、外部ファイルを組み込める関数です。
以下のようなheader.php
というファイルがあるとします。
<header>
<h1>Welcome to my website!</h1>
</header>
このheader.php
ファイルを別のファイル、たとえばindex.php
で組み込む場合、以下のようにinclude
を使用します。
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
</head>
<body>
// includeを使う
<?php include 'header.php'; ?>
<section>
<h2>About Me</h2>
<p>I am a web developer.</p>
</section>
</body>
</html>
このindex.php
を表示させると以下のようになります(追加でCSSでスタイルを当てています)。
<?php include 'header.php'; ?>
で、外部ファイルのheader.php
を読み込んでいます。
そのほかにfooter.php
やsidebar.php
など、セクションごとにコードを分けることで、複数ページで共通化できたり、メンテナンスしやすくなったりします。
ディレクトリ構造がある場合の使い方
例として、ディレクトリ構造が以下のようになっているとします。
- index.php
- includes/
- config/
- database.php
- functions/
- helper.php
- templates/
- header.php
- footer.php
index.php
ファイルでincludes
ディレクトリ以下のファイルを絶対パスで読み込むには、以下のようにします。
<?php
// includes/config/database.php を読み込む
include __DIR__ . '/includes/config/database.php';
// includes/functions/helper.php を読み込む
include __DIR__ . '/includes/functions/helper.php';
// includes/templates/header.php を読み込む
include __DIR__ . '/includes/templates/header.php';
// メインのコード
// ...
// includes/templates/footer.php を読み込む
include __DIR__ . '/includes/templates/footer.php';
?>
ここでは、__DIR__
という「マジック定数」で、現在のディレクトリを基準にした絶対パスを指定しています。
__DIR__
を使用することで、たとえば別環境に変わってディレクトリの構造が変更されても、パスの指定を修正する必要がありません。
PHPのincludeの役割と使用ケース
PHPのincludeは、主に以下のような役割があります。
- テンプレートの再利用
- 関数やクラスの定義、定数の宣言などの再利用
- コードのモジュール化
テンプレートの再利用
先に紹介したヘッダーの例のように、テンプレートを複数ファイルで再利用できるようになります。
たとえばホームページの場合、ヘッダー、ナビゲーションメニュー、フッター、サイドバーなどは、トップページ以外のページでも共通して必要です。
複数ページのソースコードに同じコードを書くのは、面倒でメンテナンス性もよくないため、外部ファイルが読み込めるinclude
が役立ちます。
関数やクラスの定義、定数の宣言などの再利用
関数やクラスの定義、定数の宣言などを再利用するために、include
を使用できます。
たとえば、以下のような関数用のファイルmath_functions.php
があるとします。
<?php
function calculate_sum($a, $b) {
return $a + $b;
}
class Circle {
const PI = 3.14159;
private $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function calculate_area() {
return self::PI * $this->radius * $this->radius;
}
}
?>
math_functions.php
ファイルでは、以下の3つが定義されています。
calculate_sum
という関数Circle
というクラス- Circleクラスの定数
PI
次に、math_functions.phpを読み込むindex.php
が以下です。
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
</head>
<body>
<?php include 'math_functions.php'; ?>
<h2>5 + 3は: <?php echo calculate_sum(5, 3); ?></h2>
<h2>半径2の円の面積は: <?php
$circle = new Circle(2);
echo $circle->calculate_area();
?></h2>
</body>
</html>
表示させると以下のようになります。
上記のindex.phpファイルでは、math_functions.php
をinclude
を使って組み込んでいます。
まず、<?php include 'math_functions.php'; ?>
により、math_functions.phpファイルの中身が読み込まれ、定義した3つが利用可能になります。
index.phpでは、calculate_sum
関数を呼び出して5と3の和を表示し、またCircle
クラスを使用して半径2の円の面積を計算して表示しています。
このように、include
を使用することで、関数やクラスの定義、定数の宣言などを別のファイルで定義し、必要な場所で再利用できます。
コードのモジュール化
include
を使用してコードをモジュール化することで、可読性の高い、再利用可能なコードを作成できます。
PHPにおけるコードのモジュール化とは、プログラムを複数の独立した部品(モジュール)に分割し、それぞれの部品を個別に作成・管理・再利用できるようにすることです。
具体的には、関数やクラス、定数などをグループにまとめ、コードがより独立した機能を持つ小さな部品に分割します。これにより、それぞれが単一の責務を担う点がポイントです。
モジュール化によって、コードの保守性、可読性、再利用性が向上し、開発の効率性も高まります。
具体例として、ユーザー認証機能やデータベース接続機能など、複数の機能があるWebアプリケーションを開発しているとします。
まず、ユーザー認証機能をauthentication.php
というファイルにモジュール化するイメージが以下です。
<?php
function authenticate_user($username, $password) {
// ユーザー認証のロジック
// ...
}
function is_user_logged_in() {
// ユーザーがログインしているかどうかをチェックする処理
// ...
}
function logout_user() {
// ユーザーのログアウト処理
// ...
}
?>
次に、データベース接続機能をdatabase.php
というファイルにモジュール化。
<?php
function connect_to_database() {
// データベースに接続する処理
// ...
}
function execute_query($query) {
// クエリを実行する処理
// ...
}
function close_database_connection() {
// データベース接続をクローズする処理
// ...
}
?>
これで、ユーザー認証機能とデータベース接続機能がそれぞれ別のファイルにモジュール化されました。
これらの機能を使って実際のページを作成するindex.php
の例が以下です。
<?php
include 'authentication.php';
include 'database.php';
if (is_user_logged_in()) {
echo "Welcome, " . $_SESSION['username'];
} else {
echo "Please log in.";
}
?>
index.phpでは、authentication.phpとdatabase.phpをinclude
を使って組み込んでいます。そして、is_user_logged_in()
関数を使ってユーザーがログインしているかどうかをチェックし、それに応じてメッセージを表示しています。
このように、include
を使用して機能ごとにコードをモジュール化することで、コードが整理されます。
ユーザー認証機能をメンテナンスしたい場合は、authentication.php
を見ればよいですね。
このように機能別にコードを部品のように分けることで、保守性が向上し、特定の機能を修正・拡張する際にも影響範囲が限定されます。
PHPのincludeとrequireの違い
PHPのinclude
とrequire
はどちらも、外部ファイルを読み込む関数です。
主な違いは、ファイルが見つからなかった場合の動作とエラーハンドリングの方法です。
include | 指定された外部ファイルを読み込み。 |
---|---|
require | 指定された外部ファイルを読み込み(ここまで |
includeの例
<?php
// includeの例
include 'file1.php';
echo 'This is the main file.';
?>
file1.php
が存在しない場合、警告メッセージが表示されますが、スクリプトの実行は続行されます。つまりThis is the main file.
が表示されます。
実際の画面が以下です。
以上のように、include
はファイルが存在しなくても処理を継続したい場合に使用されます。
requireの例
<?php
// requireの例
require 'file2.php';
echo 'This is the main file.';
?>
file2.php
が存在しない場合、致命的なエラーが発生し、スクリプトの実行が停止されます。つまり、エラーメッセージが表示されますが、This is the main file.
は表示されません。
実際の画面が以下です。
require
は必ずファイルが存在していることを前提とし、エラーが発生した場合はスクリプトの実行を停止したい場合に使用されます。
include_onceとrequire_once
同じファイルを複数回読み込むことを防ぐinclude_once
とrequire_once
という関数も存在します。
ファイルがすでに読み込まれている場合は再度読み込まれず、スキップされます。