__toString & __debugInfo
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 45 von 91.
Mit der Methode __toString() kannst du festlegen, wie ein Objekt als Zeichenkette dargestellt werden soll. Sie wird automatisch aufgerufen, wenn du ein Objekt in einem Zeichenkettenkontext verwendest, etwa mit echo oder bei der Zeichenkettenverkettung.
<?php
class User {
public function __construct(
private string $name,
private string $email
) {}
public function __toString(): string {
return $this->name . " (" . $this->email . ")";
}
}
$user = new User("Alice", "alice@example.com");
echo $user;
Ausgabe:
Alice (alice@example.com)Die Methode __debugInfo() steuert, welche Informationen angezeigt werden, wenn du var_dump() auf ein Objekt anwendest. Dies ist nützlich, um vertrauliche Daten auszublenden oder beim Debuggen berechnete Werte anzuzeigen:
<?php
class BankAccount {
public function __construct(
private string $accountNumber,
private float $balance,
private string $pin
) {}
public function __debugInfo(): array {
return [
'accountNumber' => '****' . substr($this->accountNumber, -4),
'balance' => $this->balance,
'pin' => '[HIDDEN]'
];
}
}
$account = new BankAccount("1234567890", 1500.00, "9876");
var_dump($account);
Ausgabe:
object(BankAccount)#1 (3) {
["accountNumber"]=>
string(8) "****7890"
["balance"]=>
float(1500)
["pin"]=>
string(8) "[HIDDEN]"
}Beachte, wie __debugInfo() ein Array aus Schlüssel-Wert-Paaren zurückgibt, das die standardmäßige Eigenschaftsausgabe ersetzt. Die vertrauliche PIN wird ausgeblendet, und die Kontonummer wird teilweise maskiert – perfekt für sicheres Debugging.
Aufgabe
EinfachLass uns ein System zur Verwaltung von Zugangsdaten erstellen, das sowohl die magischen Methoden __toString() als auch __debugInfo() demonstriert. Du erstellst eine Klasse, die bei der Ausgabe benutzerfreundliche Informationen anzeigt und gleichzeitig sensible Daten beim Debuggen schützt.
Du organisierst deinen Code über zwei Dateien:
Credential.php: Erstelle eineCredential-Klasse, die Anmeldeinformationen sicher speichert. Verwende Konstruktor-Promotion, um private Eigenschaften für$username(String),$password(String) und$lastLogin(String) zu definieren. Implementiere zwei magische Methoden:__toString(): Gibt einen benutzerfreundlichen String zurück:"User: [username] (Last login: [lastLogin])". Beachte, dass das Passwort niemals in der String-Darstellung offengelegt wird.__debugInfo(): Gibt ein Array fürvar_dump()zurück, das den Benutzernamen unverändert anzeigt, das Passwort maskiert, indem nur"[PROTECTED]"angezeigt wird, und das Datum der letzten Anmeldung normal darstellt.
main.php: Binde die Credential-Datei ein. Du erhältst drei Eingaben: einen Benutzernamen, ein Passwort und ein Datum der letzten Anmeldung. Erstelle mit diesen Werten eineCredential-Instanz. Gib zuerst das Credential-Objekt direkt aus (dadurch wird__toString()ausgelöst). Verwende anschließend in einer neuen Zeilevar_dump()für das Objekt, um die geschützte Debug-Ausgabe zu sehen.
Die Methode __toString() bietet eine übersichtliche und sichere Möglichkeit, die Zugangsdaten anzuzeigen, ohne das Passwort offenzulegen. Die Methode __debugInfo() stellt sicher, dass selbst beim Debuggen sensible Informationen verborgen bleiben: eine wichtige Vorgehensweise beim Arbeiten mit Authentifizierungsdaten.
Probier es selbst
<?php
require_once 'Credential.php';
// Eingaben lesen
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$lastLogin = trim(fgets(STDIN));
// TODO: Erstelle eine Credential-Instanz mit den Eingabewerten
// TODO: Echo das Credential-Objekt (löst __toString() aus)
// TODO: Verwende var_dump() auf dem Objekt, um die geschützte Debug-Ausgabe zu sehen
?>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 OOPKlassen vs. ObjekteDas Schlüsselwort $thisMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDas Schlüsselwort parent::MethodenüberschreibungDas Schlüsselwort finalAbstrakte KlassenRückblick – Mitarbeiterhierarchie7Kapselung
Öffentlich, geschützt, privatZugriffsmodifikatoren im DetailGetter und SetterInformationsverbergungKonstruktor-Promotion (8.0)Wiederholung – System zur Verwaltung von Schülerdatensätzen2Namespaces & Autoloading
Einführung in NamespacesDas use-SchlüsselwortPSR-4-Autoloading-StandardComposer-AutoloaderRückblick – Organisiertes Projekt5Schnittstellen & Verträge
Einführung in SchnittstellenSchnittstellen implementierenMehrere Schnittstellen implementierenSchnittstelle vs. abstrakte KlasseTyp-Hinweise mit SchnittstellenRückblick – Formrechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objektklonen__serialize & __unserializeRückblick – Benutzerdefinierte Sammlung11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenBenutzerdefinierte Exception-HierarchieTry, Catch, FinallyRückblick – Formularvalidator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klassen-Eigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenSchreibgeschützte Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphie
Methodenüberschreibung erneut betrachtetPolymorphie über SchnittstellenTyp-Hinweise & Union-TypenSpätes statisches BindenRückblick – Zahlungsabwickler9Traits
Einführung in TraitsMehrere Traits verwendenAuflösung von Trait-KonfliktenAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungÜbe selbstständig: Online-PHP-Compiler