Teile deine Website mit include und require in wiederverwendbare Dateien auf, mit klarer Projektstruktur und zentralen Konstanten.
Diese Lektion in Kodokon öffnenSobald deine Website über zwei Seiten hinauswächst, wird es unhaltbar, Kopfzeile, Fußzeile und Funktionen in jeder Datei zu duplizieren. PHP bietet vier Einbindungsanweisungen: include, require und ihre Varianten include_once / require_once. Alle fügen den Inhalt einer Datei an der Stelle des Aufrufs ein; der Unterschied liegt in der Fehlerbehandlung und bei wiederholten Einbindungen. Die _once-Varianten merken sich die bereits geladenen Dateien und binden sie nur einmal ein - unverzichtbar für Funktionsdateien, die nicht erneut deklariert werden dürfen.
<?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, '.', ',') . ' €';
}Eine klare Projektstruktur ist mehr wert als tausend Kommentare. Eine verbreitete Konvention: public/ enthält die Seiten, die an den Browser ausgeliefert werden (es ist der einzige offengelegte Ordner), src/ sammelt Konfiguration und Funktionen, templates/ enthält Seitenfragmente (header.php, footer.php). Den in PHP eingebauten Entwicklungsserver startest du, indem du ihn auf public/ zeigen lässt.
mkdir -p my-site/public my-site/src
mkdir -p my-site/templates
cd my-site
php -S localhost:8000 -t publicDie festen Werte des Projekts (Name der Website, Pfade, Einstellungen) verdienen Konstanten statt Variablen: Sie können nicht versehentlich überschrieben werden. const wird zur Kompilierzeit aufgelöst, define() zur Laufzeit; in der Praxis bevorzugst du const in deinen Konfigurationsdateien. Stelle Pfaden immer __DIR__ voran, den Ordner der aktuellen Datei: So funktionieren deine Einbindungen, egal von wo aus das Skript gestartet wird.
<?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');Jede Seite wird damit zu einer kurzen Montage: Konfiguration und Funktionen mit require laden und dann die Templates rund um den eigentlichen Inhalt einbinden.
<?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'; ?>