0Pricing
PHP Academy · レッスン

ファイルのインクルードと読み込み

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. PHPタグと埋め込み構文
  2. PHPループで動的なHTMLを生成する
  3. ファイルのインクルードと読み込み
  4. テンプレートパターン:ロジックとビューの分離
← PHP Academyに戻る