Menu
Coddy logo textTech

Einführung in Namespaces

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 10 von 91.

Wenn deine PHP-Projekte wachsen, wirst du viele Klassen erstellen. Was passiert, wenn zwei Klassen denselben Namen haben?

Zum Beispiel könntest du eine User-Klasse für deinen Blog und eine weitere User-Klasse für deinen Shop haben. Namespaces lösen dieses Problem, indem sie Klassen in logische Gruppen organisieren.

Ein Namespace ist wie ein Ordner für deine Klassen. Du deklarierst ihn am Anfang deiner PHP-Datei mit dem Schlüsselwort namespace:

<?php
namespace Blog;

class User {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

Jetzt kannst du eine weitere User-Klasse in einem anderen Namespace haben:

<?php
namespace Shop;

class User {
    public $email;
    
    public function __construct($email) {
        $this->email = $email;
    }
}

Um eine Klasse mit Namespace zu verwenden, verweist du mit einem umgekehrten Schrägstrich auf ihren vollständigen Pfad:

<?php
$blogUser = new \Blog\User("Alice");
$shopUser = new \Shop\User("alice@example.com");

echo $blogUser->name . "\n";
echo $shopUser->email . "\n";

Ausgabe:

Alice
alice@example.com

Der Backslash \ trennt Namespace-Ebenen, ähnlich wie Schrägstriche Ordner in einem Dateipfad trennen. Du kannst auch verschachtelte Namespaces wie App\Models\Blog erstellen, um eine tiefere Organisation zu ermöglichen.

Wichtiger Punkt: Namespaces verhindern Namenskonflikte und halten deinen Code organisiert. Deklariere den Namespace immer vor jedem anderen Code in deiner Datei (außer bei declare-Anweisungen).

challenge icon

Aufgabe

Einfach

Organisieren wir eine kleine Anwendung mithilfe von Namespaces, um Namenskonflikte zwischen Klassen mit demselben Namen zu verhindern.

Stell dir vor, du entwickelst ein System, das sowohl Fahrzeuge als auch Tiere verarbeitet. In beiden Bereichen gibt es eine Entität namens Car: Die eine stellt ein tatsächliches Auto dar, während die andere eine Hauskatze namens „Car“ ist (ja, manche Menschen nennen ihre Katzen tatsächlich so!).

Du wirst drei Dateien erstellen:

  • Vehicle/Car.php: Definiere eine Car-Klasse im Vehicle-Namespace mit einer Eigenschaft public $brand. Der Konstruktor soll den Markennamen akzeptieren und ihn setzen. Füge eine describe()-Methode hinzu, die "Vehicle: [brand]" zurückgibt.
  • Animal/Car.php: Definiere eine Car-Klasse im Animal-Namespace (dies ist eine Katze namens Car!). Sie soll eine Eigenschaft public $age besitzen. Der Konstruktor akzeptiert das Alter und setzt es. Füge eine describe()-Methode hinzu, die "Cat named Car, age: [age]" zurückgibt.
  • main.php: Binde beide Klassendateien mit require_once ein. Erstelle aus jedem Namespace ein Objekt mithilfe der vollständigen Namespace-Pfade und gib anschließend das Ergebnis des Aufrufs von describe() für jedes Objekt aus (jeweils in einer eigenen Zeile).

Erstelle in main.php:

  • Ein Vehicle\Car-Objekt mit der Marke "Toyota"
  • Ein Animal\Car-Objekt mit dem Alter 3

Denke daran, den Backslash \ zu verwenden, um beim Erstellen von Objekten auf Klassen in Namespaces über ihren vollständigen Pfad zu verweisen.

Probier es selbst

<?php
// Die Klassendateien einbinden
require_once 'Vehicle/Car.php';
require_once 'Animal/Car.php';

// TODO: Erstelle ein Vehicle\Car-Objekt mit der Marke "Toyota"
// Denk daran, den vollständigen Namespace-Pfad mit Backslash zu verwenden

// TODO: Erstelle ein Animal\Car-Objekt mit Alter 3
// Denk daran, den vollständigen Namespace-Pfad mit Backslash zu verwenden

// TODO: Gib das Ergebnis von describe() für jedes Objekt aus (jedes in einer eigenen Zeile)

?>
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-PHP-Compiler