Menu
Coddy logo textTech

Einführung in magische Methoden

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

Magische Methoden sind spezielle Methoden in PHP, die mit doppelten Unterstrichen (__) beginnen und von PHP automatisch als Reaktion auf bestimmte Ereignisse oder Aktionen aufgerufen werden. Sie haben bereits zwei davon verwendet: __construct() und __destruct().

Diese Methoden ermöglichen es Ihnen, sich in das interne Verhalten von PHP einzuklinken und anzupassen, wie Ihre Objekte auf gängige Operationen reagieren.

Was passiert zum Beispiel, wenn Sie versuchen, ein Objekt auszugeben? Oder auf eine Eigenschaft zugreifen, die nicht existiert? Magische Methoden geben Ihnen die Kontrolle über diese Situationen.

Hier ist ein kurzer Überblick über die am häufigsten verwendeten magischen Methoden:

MethodeAusgelöst wenn
__construct()Objekt wird erstellt
__destruct()Objekt wird zerstört
__toString()Objekt wird als String verwendet
__get()Zugriff auf eine nicht definierte Eigenschaft
__set()Setzen einer nicht definierten Eigenschaft
__call()Aufruf einer nicht definierten Methode
__clone()Objekt wird geklont
<?php
class Book {
    public function __construct(
        private string $title
    ) {}
    
    public function __toString(): string {
        return "Book: " . $this->title;
    }
}

$book = new Book("PHP Mastery");
echo $book;

Ausgabe:

Book: PHP Mastery

Ohne __toString() würde der Versuch, ein Objekt mit echo auszugeben, einen Fehler verursachen. Die magische Methode fängt diese Aktion ab und gibt stattdessen eine String-Repräsentation zurück. In den kommenden Lektionen werden wir jede magische Methode im Detail untersuchen.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Filmkatalog-System erstellen, das Sie in die magischen Methoden einführt. Sie werden eine Movie-Klasse erstellen, die __construct() verwendet, um Filmdaten zu initialisieren, und __toString(), um eine saubere String-Repräsentation bereitzustellen, wenn das Objekt ausgegeben wird.

Sie werden Ihren Code auf zwei Dateien aufteilen:

  • Movie.php — Erstellen Sie eine Movie-Klasse, die Filme in Ihrem Katalog repräsentiert. Verwenden Sie Constructor Promotion, um private Eigenschaften für $title (String), $director (String) und $year (Integer) zu definieren. Implementieren Sie die magische Methode __toString(), um einen formatierten String zurückzugeben: "[title] ([year]) - Directed by [director]". Dies ermöglicht es, Ihre Movie-Objekte direkt mit echo auszugeben, ohne eine separate Methode aufrufen zu müssen.
  • main.php — Binden Sie die Movie-Datei ein. Sie erhalten drei Eingaben: einen Filmtitel, einen Namen des Regisseurs und ein Erscheinungsjahr. Erstellen Sie eine Movie-Instanz unter Verwendung dieser Werte (konvertieren Sie das Jahr in einen Integer). Geben Sie dann einfach das Movie-Objekt direkt mit echo aus — die Methode __toString() wird automatisch aufgerufen, um die Ausgabe zu erzeugen.

Die Magie von __toString() besteht darin, dass PHP sie automatisch aufruft, wann immer Ihr Objekt in einem String-Kontext verwendet wird. Anstatt echo $movie->getInfo(); zu schreiben, können Sie einfach echo $movie; schreiben, und PHP übernimmt die Konvertierung für Sie. Dies macht den Umgang mit Ihren Objekten intuitiver.

Spickzettel

Magische Methoden sind spezielle Methoden in PHP, die mit doppelten Unterstrichen (__) beginnen und von PHP automatisch als Reaktion auf bestimmte Ereignisse oder Aktionen aufgerufen werden.

Häufige magische Methoden:

MethodeAusgelöst wenn
__construct()Objekt wird erstellt
__destruct()Objekt wird zerstört
__toString()Objekt wird als String verwendet
__get()Zugriff auf eine nicht definierte Eigenschaft
__set()Setzen einer nicht definierten Eigenschaft
__call()Aufruf einer nicht definierten Methode
__clone()Objekt wird geklont

Die Methode __toString() gibt eine String-Repräsentation eines Objekts zurück:

<?php
class Book {
    public function __construct(
        private string $title
    ) {}
    
    public function __toString(): string {
        return "Book: " . $this->title;
    }
}

$book = new Book("PHP Mastery");
echo $book; // Ausgabe: Book: PHP Mastery

Ohne __toString() würde der Versuch, ein Objekt mit echo auszugeben, einen Fehler verursachen. Die magische Methode fängt diese Aktion ab und ermöglicht es, das Objekt in einem String-Kontext zu verwenden.

Probier es selbst

<?php

require_once 'Movie.php';

// Eingabe lesen
$title = trim(fgets(STDIN));
$director = trim(fgets(STDIN));
$year = intval(fgets(STDIN));

// TODO: Erstellen Sie eine Movie-Instanz unter Verwendung der Eingabewerte

// TODO: Geben Sie das Movie-Objekt direkt aus (die __toString()-Methode wird automatisch aufgerufen)

?>
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