ファイルのインクルードと読み込み
includeとrequireを使ってページを再利用可能な部品に分割します
「ファイルのインクルードと読み込み」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
ファイルインクルードによるコードの再利用
PHP には、他のファイルのコードをインクルードするための 4 つの文があります。
include— ファイルをインクルードする。ファイルがない場合は警告require— ファイルをインクルードする。ファイルがない場合は致命的エラーinclude_once— まだインクルードされていない場合だけインクルードするrequire_once— まだインクルードされていない場合だけ require する
include と require
重要な違いは、require するファイルがない場合は致命的エラーになり、include するファイルがない場合は警告だけが発生することです。
<?php
// Fatal error if missing — use for critical files
require 'config.php';
require 'database.php';
// Warning if missing, but execution continues
include 'optional_plugin.php';
// Use __DIR__ for reliable relative paths:
require __DIR__ . '/helpers/utils.php';include_once と require_once
_once 形式を使用すると、同じファイルが複数回インクルードされるのを防げます。
<?php
// Without _once: including twice redefines functions
include 'functions.php';
include 'functions.php'; // Fatal: function redefined!
// With _once: second include is a no-op
require_once 'functions.php';
require_once 'functions.php'; // safe — skipped
// Rule: use require_once for class and function definition filesインクルードファイルの変数スコープ
インクルードされたファイルは、インクルード元のファイルのスコープを共有します。ただし、関数のスコープは共有しません。
<?php
// main.php
$title = 'My Site';
require 'header.php'; // header.php can use $title
// But in a function:
function loadTemplate(): void {
require 'header.php'; // $title is NOT accessible here!
// Must pass data explicitly
}インクルードファイルからの値の返却
インクルードファイルでは、return 文を使用して値を返せます。
<?php
// config.php content:
// return ['debug' => true, 'db_host' => 'localhost'];
// main.php:
$config = require 'config.php';
echo $config['db_host']; // localhost
// Common pattern for configuration files that return arraysシンプルなレイアウトの構築
ページを再利用可能なヘッダー、コンテンツ、フッターのファイルに分割します。
<?php
// index.php
$pageTitle = 'Home Page';
$bodyClass = 'home';
require_once 'partials/header.php';
?>
<main class="container">
<h1>Welcome!</h1>
<p>Main content goes here.</p>
</main>
<?php require_once 'partials/footer.php'; ?>テンプレートパーシャル
繰り返し使用するコンポーネント用に、再利用可能なパーシャルビューファイルを作成します。
<?php
// partials/card.php
// Expects: $card['title'], $card['body'], $card['url']
?>
<div class="card">
<h3><a href="<?= htmlspecialchars($card['url']) ?>">
<?= htmlspecialchars($card['title']) ?>
</a></h3>
<p><?= htmlspecialchars($card['body']) ?></p>
</div>パーシャルへの変数の引き渡し
インクルードする前にローカル変数へ代入して、パーシャルにデータを渡します。
<?php
$articles = getArticles();
foreach ($articles as $article) {
$card = [
'title' => $article['title'],
'body' => substr($article['body'], 0, 100) . '...',
'url' => '/articles/' . $article['slug'],
];
require 'partials/card.php';
}include とオートローディング
Composer を使用する現代的な PHP では、クラスファイルはオートロードされるため、手動でインクルードする必要はありません。
<?php
// Old way (manual includes):
require 'classes/User.php';
require 'classes/Post.php';
// Modern way (Composer autoloading):
require __DIR__ . '/vendor/autoload.php';
// Classes are loaded automatically when first used
$user = new User(); // User.php loaded by autoloader
$post = new Post(); // Post.php loaded by autoloaderセキュリティ: パストラバーサルの防止
検証されていないユーザー入力に基づいてファイルをインクルードしてはいけません。
<?php
// DANGEROUS:
$page = $_GET['page'];
include $page . '.php'; // allows ../../etc/passwd
// SAFE: whitelist allowed pages
$allowed = ['home', 'about', 'contact'];
$page = $_GET['page'] ?? 'home';
if (!in_array($page, $allowed)) {
$page = 'home';
}
include __DIR__ . '/pages/' . $page . '.php';include_path の設定
完全なパスを指定せずにファイルをインクルードできるよう、PHP の include_path を設定します。
<?php
// Current include_path:
echo get_include_path();
// Add your library directory:
set_include_path(
get_include_path() . PATH_SEPARATOR . '/var/www/lib'
);
// Now you can include without full path:
include 'helpers.php'; // found in /var/www/lib/helpers.php確認問題
ファイルがない場合、include と require にはどのような違いがありますか。
まとめ: ファイルのインクルード
まとめ:
require— ファイルがない場合は致命的エラー。重要なファイルに使用するinclude— ファイルがない場合は警告。オプションのファイルに使用する- _once 形式は二重読み込みを防ぐ
- インクルードされたファイルは呼び出し元の変数スコープを共有する
- ファイルは
returnで値を返せる - ユーザー入力からパスを取得してインクルードしてはいけない。許可リストだけを使用する
よくある質問
「ファイルのインクルードと読み込み」レッスンは無料ですか?
はい。「ファイルのインクルードと読み込み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「ファイルのインクルードと読み込み」で何を学びますか?
includeとrequireを使ってページを再利用可能な部品に分割します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ファイルのインクルードと読み込み」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- PHPタグと埋め込み構文
- PHPループで動的なHTMLを生成する
- ファイルのインクルードと読み込み
- テンプレートパターン:ロジックとビューの分離