Menu
Coddy logo textTech

__toString & __debugInfo

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 45 sur 91.

La méthode __toString() vous permet de définir comment un objet doit être représenté sous forme de chaîne de caractères. Elle est appelée automatiquement lorsque vous utilisez un objet dans un contexte de chaîne, comme avec echo ou une concaténation de chaînes.

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

Résultat :

Alice (alice@example.com)

La méthode __debugInfo() contrôle les informations qui s'affichent lorsque vous utilisez var_dump() sur un objet. Ceci est utile pour masquer des données sensibles ou afficher des valeurs calculées lors du débogage :

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

Sortie :

object(BankAccount)#1 (3) {
  ["accountNumber"]=>
  string(8) "****7890"
  ["balance"]=>
  float(1500)
  ["pin"]=>
  string(8) "[HIDDEN]"
}

Remarquez comment __debugInfo() retourne un tableau de paires clé-valeur qui remplace l'affichage par défaut des propriétés. Le code PIN sensible est masqué, et le numéro de compte est partiellement masqué - parfait pour un débogage sécurisé.

challenge icon

Défi

Facile

Construisons un système de gestion d'identifiants qui démontre l'utilisation des méthodes magiques __toString() et __debugInfo(). Vous allez créer une classe qui affiche des informations conviviales lors de l'impression, tout en protégeant les données sensibles pendant le débogage.

Vous organiserez votre code sur deux fichiers :

  • Credential.php — Créez une classe Credential qui stocke les informations de connexion de manière sécurisée. Utilisez la promotion de constructeur pour définir des propriétés privées pour $username (string), $password (string), et $lastLogin (string). Implémentez deux méthodes magiques :
    • __toString() — Retourne une chaîne conviviale : "User: " . $this->username . " (Last login: " . $this->lastLogin . ")". Notez que le mot de passe n'est jamais exposé dans la représentation sous forme de chaîne.
    • __debugInfo() — Retourne un tableau pour var_dump() qui affiche le nom d'utilisateur tel quel, masque le mot de passe en affichant uniquement "[PROTECTED]", et affiche la date de dernière connexion normalement.
  • main.php — Incluez le fichier Credential. Vous recevrez trois entrées : un nom d'utilisateur, un mot de passe et une date de dernière connexion. Créez une instance de Credential avec ces valeurs. D'abord, affichez l'objet credential directement avec echo (cela déclenche __toString()). Ensuite, sur une nouvelle ligne, utilisez var_dump() sur l'objet pour voir la sortie de débogage protégée.

La méthode __toString() offre un moyen propre et sûr d'afficher l'identifiant sans exposer le mot de passe. La méthode __debugInfo() garantit que même pendant le débogage, les informations sensibles restent cachées — une pratique cruciale lors de la manipulation de données d'authentification.

Aide-mémoire

La méthode __toString() définit comment un objet est représenté sous forme de chaîne de caractères lorsqu'il est utilisé avec echo ou une concaténation de chaînes :

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

La méthode __debugInfo() contrôle les informations qui apparaissent lors de l'utilisation de var_dump() sur un objet. Elle retourne un tableau de paires clé-valeur à afficher :

<?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);
// Shows masked account number and hidden PIN

Ces méthodes sont utiles pour masquer des données sensibles ou personnaliser la sortie d'un objet pour différents contextes.

Essayez vous-même

<?php

require_once 'Credential.php';

// Lire les entrées
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$lastLogin = trim(fgets(STDIN));

// TODO: Créer une instance de Credential avec les valeurs d'entrée

// TODO: Afficher l'objet credential (déclenche __toString())

// TODO: Utiliser var_dump() sur l'objet pour voir la sortie de débogage protégée

?>
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet