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éthode | Dé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 MasterySans __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.
Défi
FacileConstruisons 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 classeMoviequi 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 deMovieen 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éthode | Dé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)
?>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
1Les bases de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition de méthodeLe mot-clé finalClasses abstraitesRécapitulatif - Hiérarchie des employés7Encapsulation
Public, Protégé, PrivéModificateurs d'accès en détailGetters et SettersMasquage d'informationPromotion de constructeur (8.0)Récapitulatif - Système de gestion d'étudiants10Concepts avancés de la POO
Composition vs HéritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibers (PHP 8.1)Clonage d'objets : analyse approfondieGénérateurs et Itérateurs13Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository2Espaces de noms et Autoloading
Introduction aux espaces de nomsLe mot-clé useStandard d'Autoloading PSR-4L'Autoloader ComposerRécapitulatif - Projet organisé5Interfaces et Contrats
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesInterface vs Classe AbstraiteType Hinting avec les InterfacesRécapitulatif - Calculateur de Formes8Méthodes magiques
Introduction aux méthodes magiques__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Clonage d'objets__serialize & __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d'instance vs Propriétés statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés readonly (PHP 8.1)Récapitulatif - Gestionnaire de compte bancaire6Polymorphisme
Retour sur la redéfinition de méthodePolymorphisme via les interfacesType Hinting et Types d'unionLiaison statique tardiveRécapitulatif - Processeur de paiement9Traits
Introduction aux TraitsUtilisation de plusieurs TraitsRésolution des conflits de TraitsMéthodes abstraites dans les TraitsTraits vs Héritage12Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie