Les noms de fonction
__construct,
__destruct
(voir les Constructeurs et Destructeurs),
__call,
__get,
__set,
__isset,
__unset
(voir la surcharge),
__sleep,
__wakeup,
__toString,
__set_state,
__clone et
__autoload
sont magiques dans les classes PHP. Vous ne pouvez pas utiliser ces noms de fonction
dans aucune de vos classes sauf si vous voulez modifier
le comportement associé Ã ces fonctions magiques.
| Attention |
PHP réserve tous les noms de fonctions commençant par __ pour
les fonctions magiques. Il est recommandé de ne pas utiliser de noms
de fonctions commençant par __ sauf si vous voulez des fonctionnalités magiques
documentées.
|
La fonction serialize() vérifie si votre classe a une fonction
avec le nom magique __sleep. Si c'est le cas, cette fonction
sera exécutée avant toute linéarisation. Elle peut nettoyer l'objet et elle est
supposée retourner un tableau avec les noms de toutes les variables de l'objet
qui doivent être linéarisées.
Le but avoué de __sleep est de clore toutes les
connexions aux bases de données que l'objet peut avoir, valider
les données en attente ou effectuer des tâches de nettoyage.
De plus, cette fonction est utile si vous avez de très gros objets
qui n'ont pas besoin d'être sauvegardés en totalité.
Réciproquement, la fonction unserialize() vérifie
la présence d'une fonction dont le nom est le nom magique
__wakeup. Si elle est présente, cette fonction
peut reconstruire toute ressource que l'objet possède.
Le but avoué de __wakeup est de rétablir
toute connexion base de données qui aurait été perdue
durant la linéarisation et d'effectuer des tâches de réinitialisation.
Exemple 19-27. Utilisation de Sleep et de wakeup
<?php class Connection { protected $link; private $server, $username, $password, $db;
public function __construct($server, $username, $password, $db) { $this->server = $server; $this->username = $username; $this->password = $password; $this->db = $db; $this->connect(); }
private function connect() { $this->link = mysql_connect($this->server, $this->username, $this->password); mysql_select_db($this->db, $this->link); }
public function __sleep() { mysql_close($this->link); }
public function __wakeup() { $this->connect(); } } ?>
|
|
La méthode __toString détermine comment la classe
doit réagir lorsqu'elle est convertie en chaîne de caractères.
Exemple 19-28. Exemple simple
<?php // Déclaration d'une classe simple class ClasseTest { public $foo;
public function __construct($foo) { $this->foo = $foo; }
public function __toString() { return $this->foo; } }
$class = new ClasseTest('Bonjour'); echo $class; ?>
|
L'exemple ci-dessus va afficher : |
Il est important de noter qu'avant PHP 5.2.0, la méthode
__toString n'était appelée que si elle était
directement combinée avec echo() ou
print().
Cette méthode statique est appelée
pour les classes exportées par la fonction var_export()
depuis PHP 5.1.0.
Le seul paramètre de cette méthode est un tableau contenant les propriétés
exportées sous la forme array('propriété' => valeur, ...).