Aller au contenu principal

Les méthodes magiques

Partie théorique

En PHP, les méthodes magiques sont des méthodes spéciales qui ont des noms prédéfinis. Ces méthodes sont automatiquement appelées lorsqu'un certain événement se produit. Par exemple, la méthode magique __construct() est automatiquement appelée lorsqu'un nouvel objet est créé.

Voici quelques exemples de méthodes magiques en PHP :

  • __construct() : appelée lors de la création d'un nouvel objet.
  • __destruct() : appelée lors de la destruction d'un objet.
  • __get($property) : appelée lorsqu'on tente d'accéder à une propriété non accessible ou inexistante.
  • __set($property, $value) : appelée lorsqu'on tente de modifier une propriété non accessible ou inexistante.
  • __call($method, $args) : appelée lorsqu'on tente d'appeler une méthode non accessible ou inexistante.
  • __toString() : appelée lorsque vous essayez de convertir un objet en chaîne de caractères.

Exemple pratique

class Voiture {
public $marque;

public function __construct($marque) {
$this->marque = $marque;
}

public function __get($property) {
if (property_exists($this, $property)) {
return $this->$property;
}
}

public function __set($property, $value) {
if (property_exists($this, $property)) {
$this->$property = $value;
}
}

public function __toString() {
return "Voiture de marque " . $this->marque;
}
}

$voiture = new Voiture("Peugeot");
print($voiture->marque); // Affiche : Peugeot
$voiture->marque = "Renault";
print($voiture->marque); // Affiche : Renault
print($voiture); // Affiche : Voiture de marque Renault

Test de mémorisation/compréhension


Quelle méthode magique est appelée lors de la création d'un nouvel objet ?


Quelle méthode magique est appelée lorsque vous essayez de convertir un objet en chaîne de caractères ?


Quelle méthode magique est appelée lorsqu'on tente d'accéder à une propriété non accessible ou inexistante ?


Quelle méthode magique est appelée lorsqu'on tente de modifier une propriété non accessible ou inexistante ?



TP pour réfléchir et résoudre des problèmes

Objectif du TP : Dans ce TP, nous allons créer une classe Fichier en PHP qui va nous permettre de créer un nouveau fichier texte et d'écrire du contenu dedans. Nous allons utiliser les méthodes magiques __construct() et __toString() pour accomplir cela.

Les étapes pour réaliser ce TP sont les suivantes :

  1. Dans votre répertoire "Documents" créez le répertoire tp_methodes_magiques.

  2. Dans ce répertoire, créez le fichier autoload.php :

    <?php
    spl_autoload_register(function($class) {
    require 'classes/' . $class . '.php';
    });
  3. Dans ce répertoire, créez le fichier main.php :

    <?php
    include 'autoload.php';

    // Les méthodes magiques
    print("Les méthodes magiques \n\n");
  4. Testez le fonctionnement de ce fichier :

    php main.php


  5. Dans le répertoire methodes_magiques créez le répertoire classes

  6. Dans ce répertoire, créez le fichier Fichier.phppour définir la classe Fichier.

  7. Définir la propriété chemin : Dans la classe Fichier, définissez une propriété privée $chemin. Cette propriété va stocker le chemin du fichier que nous allons créer.

  8. Définir la méthode magique __construct() : Dans la classe Fichier, définissez la méthode magique __construct(). Cette méthode doit prendre deux paramètres : $chemin et $contenu. Dans cette méthode, affectez la valeur de $chemin à la propriété $this->chemin, puis utilisez la fonction file_put_contents() pour créer le fichier et écrire le contenu dedans.

  9. Définir la méthode magique __toString() : Dans la classe Fichier, définissez la méthode magique __toString(). Cette méthode doit retourner le contenu du fichier. Utilisez la fonction file_get_contents() pour lire le contenu du fichier.

  10. Tester la classe Fichier : Enfin, créez une instance de la classe Fichier et passez le chemin du fichier et le contenu que vous voulez écrire dans le fichier. Ensuite, utilisez print ou echo pour afficher le contenu du fichier.

info

La fonction file_put_contents() écrit des données dans un fichier.

Si le fichier filename n'existe pas, il sera créé.

Sinon, le fichier existant sera écrasé (si l'option FILE_APPEND n'est pas définie).

astuce
  • Pour que les méthodes magiques __construct() et __toString() soient accessibles, il faut qu'elles soient public.
Un corrigé du TP
  • Code du fichier autoload.php :
    spl_autoload_register(function($class) {
require 'classes/' . $class . '.php';
});
  • Code du fichier Fichier.php :
class Fichier {
private $chemin;

public function __construct($chemin, $contenu) {
$this->chemin = $chemin;
file_put_contents($this->chemin, $contenu);
}

public function __toString() {
return file_get_contents($this->chemin);
}
}
  • Code du fichier main.php :
include 'autoload.php';

// Les méthodes magiques
print("Les méthodes magiques \n\n");

$fichier = new Fichier("monFichier.txt", "Bonjour NDLP !");
print($fichier); // Affiche : Bonjour NDLP !