Menu
Coddy logo textTech

Introduction aux méthodes magiques

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

Les méthodes magiques sont des méthodes spéciales en PHP qui commencent par deux traits de soulignement (__) et sont automatiquement appelées par PHP en réponse à certains événements ou actions. Vous en avez déjà utilisé deux : __construct() et __destruct().

Ces méthodes vous permettent de vous greffer sur le comportement interne de PHP et de personnaliser la façon dont vos objets répondent aux opérations courantes.

Par exemple, que se passe-t-il lorsque vous essayez d'afficher un objet ? Ou d'accéder à une propriété qui n'existe pas ? Les méthodes magiques vous permettent de contrôler ces situations.

Voici un aperçu rapide des méthodes magiques les plus couramment utilisées :

MéthodeDéclenché lorsque
__construct()L'objet est créé
__destruct()L'objet est détruit
__toString()L'objet est utilisé comme une chaîne de caractères
__get()Accès à une propriété non définie
__set()Définition d'une propriété non définie
__call()Appel d'une méthode non définie
__clone()L'objet est cloné
<?php
class Book {
    public function __construct(
        private string $title
    ) {}
    
    public function __toString(): string {
        return "Book: " . $this->title;
    }
}

$book = new Book("PHP Mastery");
echo $book;

Sortie :

Book: PHP Mastery

Sans __toString(), tenter d'afficher un objet avec echo provoquerait une erreur. La méthode magique intercepte cette action et retourne une représentation sous forme de chaîne de caractères à la place. Dans les prochaines leçons, nous explorerons chaque méthode magique en détail.

challenge icon

Défi

Facile

Construisons un système de catalogue de films qui vous présente les méthodes magiques. Vous allez créer une classe Movie qui utilise __construct() pour initialiser les données du film et __toString() pour fournir une représentation textuelle propre lorsque l'objet est affiché.

Vous organiserez votre code sur deux fichiers :

  • Movie.php — Créez une classe Movie qui représente les films de votre catalogue. Utilisez la promotion de constructeur pour définir des propriétés privées pour $title (chaîne de caractères), $director (chaîne de caractères) et $year (entier). Implémentez la méthode magique __toString() pour retourner une chaîne formatée : "[title] ([year]) - Directed by [director]". Cela permet à vos objets movie d'être affichés directement avec echo sans appeler de méthode distincte.
  • main.php — Incluez le fichier Movie. Vous recevrez trois entrées : un titre de film, un nom de réalisateur et une année de sortie. Créez une instance de Movie en utilisant ces valeurs (convertissez l'année en entier). Ensuite, affichez simplement l'objet movie directement — la méthode __toString() sera automatiquement appelée pour produire la sortie.

La magie de __toString() est que PHP l'appelle automatiquement chaque fois que votre objet est utilisé dans un contexte de chaîne de caractères. Au lieu d'écrire echo $movie->getInfo();, vous pouvez simplement écrire echo $movie; et PHP gère la conversion pour vous. Cela rend vos objets plus intuitifs à utiliser.

Aide-mémoire

Les méthodes magiques sont des méthodes spéciales en PHP qui commencent par un double souligné (__) et sont automatiquement appelées par PHP en réponse à certains événements ou actions.

Méthodes magiques courantes :

MéthodeDéclenchée quand
__construct()L'objet est créé
__destruct()L'objet est détruit
__toString()L'objet est utilisé comme une chaîne de caractères
__get()Accès à une propriété non définie
__set()Affectation d'une propriété non définie
__call()Appel d'une méthode non définie
__clone()L'objet est cloné

La méthode __toString() retourne une représentation sous forme de chaîne de caractères d'un objet :

<?php
class Book {
    public function __construct(
        private string $title
    ) {}
    
    public function __toString(): string {
        return "Book: " . $this->title;
    }
}

$book = new Book("PHP Mastery");
echo $book; // Résultat: Book: PHP Mastery

Sans __toString(), essayer d'afficher un objet avec echo provoquerait une erreur. La méthode magique intercepte cette action et permet à l'objet d'être utilisé dans un contexte de chaîne de caractères.

Essayez vous-même

<?php

require_once 'Movie.php';

// Lire l'entrée
$title = trim(fgets(STDIN));
$director = trim(fgets(STDIN));
$year = intval(fgets(STDIN));

// TODO: Créer une instance de Movie en utilisant les valeurs d'entrée

// TODO: Afficher l'objet movie directement (la méthode __toString() sera appelée automatiquement)

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