Menu
Coddy logo textTech

__toString & __debugInfo

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

Die Methode __toString() ermöglicht es Ihnen zu definieren, wie ein Objekt als String dargestellt werden soll. Dies wird automatisch aufgerufen, wenn Sie ein Objekt in einem String-Kontext verwenden, wie zum Beispiel mit echo oder bei einer String-Verkettung.

<?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 Sie var_dump() auf ein Objekt anwenden. Dies ist nützlich, um sensible Daten auszublenden oder berechnete Werte während des Debuggings 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]"
}

Beachten Sie, wie __debugInfo() ein Array von Schlüssel-Wert-Paaren zurückgibt, die den standardmäßigen Eigenschafts-Dump ersetzen. Die sensible PIN ist verborgen und die Kontonummer ist teilweise maskiert – perfekt für sicheres Debugging.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein System zur Verwaltung von Anmeldedaten erstellen, das sowohl die magischen Methoden __toString() als auch __debugInfo() demonstriert. Sie werden eine Klasse erstellen, die beim Drucken benutzerfreundliche Informationen anzeigt und gleichzeitig sensible Daten während des Debuggings schützt.

Sie werden Ihren Code in zwei Dateien organisieren:

  • Credential.php — Erstellen Sie eine Klasse Credential, die Anmeldeinformationen sicher speichert. Verwenden Sie Constructor Promotion, um private Eigenschaften für $username (string), $password (string) und $lastLogin (string) zu definieren. Implementieren Sie zwei magische Methoden:
    • __toString() — Gibt eine benutzerfreundliche Zeichenfolge zurück: "User: [username] (Last login: [lastLogin])". Beachten Sie, dass das Passwort in der String-Repräsentation niemals offengelegt wird.
    • __debugInfo() — Gibt ein Array für var_dump() zurück, das den Benutzernamen so anzeigt, wie er ist, das Passwort maskiert, indem es nur "[PROTECTED]" anzeigt, und das Datum der letzten Anmeldung normal darstellt.
  • main.php — Binden Sie die Datei Credential ein. Sie erhalten drei Eingaben: einen Benutzernamen, ein Passwort und ein Datum für die letzte Anmeldung. Erstellen Sie eine Credential-Instanz mit diesen Werten. Geben Sie zuerst das Credential-Objekt direkt mit echo aus (dies löst __toString() aus). Verwenden Sie dann in einer neuen Zeile var_dump() auf das Objekt, um die geschützte Debug-Ausgabe zu sehen.

Die Methode __toString() bietet eine saubere und sichere Möglichkeit, die Anmeldedaten anzuzeigen, ohne das Passwort preiszugeben. Die Methode __debugInfo() stellt sicher, dass sensible Informationen selbst während des Debuggings verborgen bleiben – eine entscheidende Praxis bei der Arbeit mit Authentifizierungsdaten.

Spickzettel

Die Methode __toString() definiert, wie ein Objekt als String dargestellt wird, wenn es mit echo oder String-Verkettung verwendet wird:

<?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; // Alice (alice@example.com)

Die Methode __debugInfo() steuert, welche Informationen angezeigt werden, wenn var_dump() auf ein Objekt angewendet wird. Sie gibt ein Array von Schlüssel-Wert-Paaren zurück, die angezeigt werden sollen:

<?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);
// Zeigt die maskierte Kontonummer und die versteckte PIN

Diese Methoden sind nützlich, um sensible Daten zu verbergen oder die Objektausgabe für verschiedene Kontexte anzupassen.

Probier es selbst

<?php

require_once 'Credential.php';

// Eingaben lesen
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$lastLogin = trim(fgets(STDIN));

// TODO: Erstellen Sie eine Credential-Instanz mit den Eingabewerten

// TODO: Geben Sie das Credential-Objekt mit echo aus (löst __toString() aus)

// TODO: Verwenden Sie var_dump() auf das Objekt, um die geschützte Debug-Ausgabe zu sehen

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