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:
| Methode | Ausgelö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 MasteryOhne __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.
Aufgabe
EinfachLassen 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 eineMovie-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 eineMovie-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:
| Methode | Ausgelö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)
?>Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas $this-SchlüsselwortMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick - Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDas parent:: SchlüsselwortMethoden überschreibenDas final SchlüsselwortAbstrakte KlassenZusammenfassung – Mitarbeiter-Hierarchie7Kapselung
Public, Protected, PrivateZugriffsmodifikatoren im DetailGetter und SetterInformation HidingConstructor Promotion (8.0)Zusammenfassung – Studentenverwaltungssystem2Namensräume & Autoloading
Einführung in NamensräumeDas use-SchlüsselwortPSR-4 Autoloading-StandardComposer AutoloaderZusammenfassung – Organisiertes Projekt5Interfaces & Verträge
Einführung in InterfacesInterfaces implementierenMehrfache Interface-ImplementierungInterface vs. Abstrakte KlasseType Hinting mit InterfacesZusammenfassung – Formen-Rechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objekt-Klonen__serialize & __unserializeZusammenfassung - Eigene Collection11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenEigene Exception-HierarchieTry, Catch, FinallyZusammenfassung - Formular-Validator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klasseneigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenReadonly-Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphismus
Method Overriding erneut betrachtetPolymorphismus über InterfacesType Hinting & Union TypesLate Static BindingZusammenfassung – Payment Processor9Traits
Einführung in TraitsVerwendung mehrerer TraitsKonfliktlösung bei TraitsAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung