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 Kollisions­probleme;
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 Klassen­umbenennung.
  • Falsche Groß‑/Klein­schreibung 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.