Namespaces und Autoloading in PHP
Namespaces & Autoloading in PHP
Sobald ein Projekt mehr als ein paar Dateien hat, benötigst du klare Namensräume und
einen Autoloader statt vieler require‑Aufrufe.
Namespaces verhindern Kollisionsprobleme;
Autoloading lädt Klassen automatisch nach dem PSR‑4‑Standard.
Hier eine fehlerfreie Vorlage – alle Codeblöcke stecken in <pre>, damit
WordPress sie korrekt zeigt und nichts mehr „grau durchläuft“.
1. Namespaces – Grundidee
- Kollisionen vermeiden: Zwei Pakete können beide eine Klasse Logger haben – unterschiedliche Namespaces lösen das.
- Struktur schaffen: Module, Versionen, Vendor‑Code klar trennen.
1.1 Namespace definieren
<?php namespace App\Utils; class Logger { public function info(string $msg) { echo "[INFO] $msg"; } } ?>
Die erste Anweisung der Datei ist namespace App\Utils;
.
Backslashes trennen Ebenen (App → Utils).
1.2 Klasse importieren und nutzen
<?php require 'vendor/autoload.php'; // Composer‑Autoloader use App\Utils\Logger; $log = new Logger(); $log->info("Hallo Welt"); ?>
2. Autoloading – PSR‑4 mit Composer
2.1 composer.json anpassen
{ "autoload": { "psr-4": { "App\\": "src/" } } }
- Namespace‑Prefix App\\ verweist auf Ordner src/.
- Klasse App\Service\MailSender ➔ Datei src/Service/MailSender.php.
- Nach Änderungen: composer dump-autoload ausführen.
2.2 Minimaler Einstiegspunkt
/projekt ├── composer.json ├── src/ │ └── Utils/Logger.php ├── public/ │ └── index.php └── vendor/ …
<!-- public/index.php --> <?php require __DIR__ . '/../vendor/autoload.php'; use App\Utils\Logger; (new Logger())->info("Startseite geladen"); ?>
3. Eigener PSR‑4‑Autoloader (ohne Composer)
spl_autoload_register(function ($class) { $prefix = 'App\\'; $baseDir = __DIR__ . '/src/'; $len = strlen($prefix); if (strncmp($prefix, $class, $len) !== 0) { return; } $relative = str_replace('\\', '/', substr($class, $len)) . '.php'; $file = $baseDir . $relative; if (file_exists($file)) { require $file; } });
4. Häufige Stolpersteine
- composer dump-autoload vergessen nach Klassenumbenennung.
- Falsche Groß‑/Kleinschreibung bei Linux‑Servern (case‑sensitiv).
- namespace‑Zeile fehlt oder doppelt in der Datei.
Fazit
Mit Namespaces und Autoloading erhält dein PHP‑Projekt eine
klare, konfliktfreie Struktur.
Composer‑PSR‑4 braucht nur wenige Zeilen in composer.json; danach lädt
vendor/autoload.php alle Klassen automatisch, und deine Anwendung bleibt
übersichtlich – ohne graue Endlos‑Blöcke im Editor.