includeとrequireでサイトを再利用可能なファイルに分割し、明確なプロジェクト構造と、一元化された定数を手に入れましょう。
このレッスンを Kodokon で開くサイトが二ページを超えて大きくなると、ヘッダー、フッター、関数をすべてのファイルで複製するのは手に負えなくなります。PHPには四つの取り込み命令があります。include、require、そしてそれらのinclude_once / require_onceという変種です。どれも呼び出した位置にファイルの中身を挿入します。違いはエラー処理と繰り返しの取り込みにあります。_onceという変種は、すでに読み込んだファイルを覚えておき、一度だけ取り込みます。再宣言できない関数ファイルには欠かせません。
<?php
declare(strict_types=1);
function e(string $value): string
{
return htmlspecialchars($value, ENT_QUOTES);
}
function formatPrice(float $amount): string
{
return number_format($amount, 2, '.', ',') . ' €';
}明確なプロジェクト構造は、千のコメントに値します。よくある慣習はこうです。public/はブラウザに配信されるページを収めます(唯一公開されるフォルダです)。src/は設定と関数をまとめ、templates/はページの断片(header.php、footer.php)を収めます。PHP組み込みの開発サーバーは、public/を指し示して起動します。
mkdir -p my-site/public my-site/src
mkdir -p my-site/templates
cd my-site
php -S localhost:8000 -t publicプロジェクトの固定値(サイト名、パス、設定)は、変数よりも定数にふさわしいものです。うっかり上書きされることがないからです。constはコンパイル時に、define()は実行時に解決されます。実際には、設定ファイルではconstを選びましょう。パスには常に、現在のファイルのフォルダである__DIR__を前に付けましょう。そうすれば、スクリプトがどこから起動されても取り込みが正しく動きます。
<?php
declare(strict_types=1);
const SITE_NAME = 'La Bonne Pizza';
const ITEMS_PER_PAGE = 12;
const UPLOAD_DIR = __DIR__ . '/../public/uploads';
define('BASE_URL', 'http://localhost:8000');そうすると各ページは短い組み立て作業になります。requireで設定と関数を読み込み、それから固有の内容の周りにテンプレートを取り込むのです。
<?php
require __DIR__ . '/../src/config.php';
require_once __DIR__ . '/../src/functions.php';
$pageTitle = SITE_NAME . ' - Home';
include __DIR__ . '/../templates/header.php';
?>
<main>
<h1><?= e($pageTitle) ?></h1>
<p>Pizza of the day: <?= formatPrice(9.5) ?></p>
</main>
<?php include __DIR__ . '/../templates/footer.php'; ?>