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
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 :
-
Dans votre répertoire "Documents" créez le répertoire
tp_methodes_magiques
. -
Dans ce répertoire, créez le fichier
autoload.php
:<?php
spl_autoload_register(function($class) {
require 'classes/' . $class . '.php';
}); -
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"); -
Testez le fonctionnement de ce fichier :
php main.php
-
Dans le répertoire
methodes_magiques
créez le répertoireclasses
-
Dans ce répertoire, créez le fichier
Fichier.php
pour définir la classeFichier
. -
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. -
Définir la méthode magique
__construct()
: Dans la classeFichier
, 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 fonctionfile_put_contents()
pour créer le fichier et écrire le contenu dedans. -
Définir la méthode magique
__toString()
: Dans la classeFichier
, définissez la méthode magique__toString()
. Cette méthode doit retourner le contenu du fichier. Utilisez la fonctionfile_get_contents()
pour lire le contenu du fichier. -
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, utilisezprint
ouecho
pour afficher le contenu du fichier.
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).
- Pour que les méthodes magiques
__construct()
et__toString()
soient accessibles, il faut qu'elles soientpublic
.
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 !