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.