Menu
Coddy logo textTech

__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.

challenge icon

Aufgabe

Einfach

Lass 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 eine Credential-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ür var_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 eine Credential-Instanz. Gib zuerst das Credential-Objekt direkt aus (dadurch wird __toString() ausgelöst). Verwende anschließend in einer neuen Zeile var_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

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