XCII. Overload
Le but de cette extension est de permettre de maîtriser les appels
aux méthodes et aux membres d'un objet. Seule une fonction est définie
dans cette extension, overload() qui demande le
nom de la classe qui doit supporter cette fonctionnalité. Cette classe doit
être pourvue des méthodes nécessaires au bon fonctionnement de l'extension,
c'est-à-dire : __get(), __set() et
__call(), qui servent respectivement à lire, à modifier
un membre et à appeler une méthode. De cette manière, l'overloading
assure un contrôle sur les fonctions appelées. A l'intérieur de ces
méthodes, l'overloading est désactivé, pour que vous puissiez accéder
à l'objet.
| Avertissement | Ce module est
EXPERIMENTAL. Cela signifie que le comportement de ces
fonctions, leurs noms et concrètement, TOUT ce qui est documenté ici peut
changer dans un futur proche, SANS PREAVIS! Soyez-en conscient, et utilisez
ce module à vos risques et périls. |
| Avertissement |
Cette extension ne fait pas partie de PHP 5. PHP 5 supporte
__get(), __set() et __call()
nativement.
Voir la page traitant de la surcharge en PHP 5
pour plus d'informations.
|
Ces fonctions sont disponibles dans le module PHP
standard, qui est toujours accessible.
Afin d'utiliser ces fonctions, vous devez compiler PHP avec
l'option --enable-overload.
Depuis PHP 4.3.0, cette extension est activée par défaut. Pour la
désactiver, utilisez l'option
--disable--overload.
La version Windows de PHP
dispose du support automatique de cette extension. Vous n'avez pas à ajouter
de bibliothèque supplémentaire pour disposer de ces fonctions. Note :
Le support par défaut de l'extension overload a été ajouté en
PHP 4.3.0.
Cette extension ne définit aucune directive de
configuration. Cette extension ne définit aucune ressource. Cette extension ne définit aucune constante.
Voici un exemple simple de fonctions utilisant overload() :
Exemple 1. Overload avec une classe PHP
<?php
class OO { var $a = 111; var $elem = array('b' => 9, 'c' => 42);
// Fonction de callback pour la lecture de membre function __get($prop_name, &$prop_value) { if (isset($this->elem[$prop_name])) { $prop_value = $this->elem[$prop_name]; return true; } else { return false; } }
// Fonction de callback pour l'écriture de membre function __set($prop_name, $prop_value) { $this->elem[$prop_name] = $prop_value; return true; } }
// Ici, l'initiation de l'overload overload('OO');
$o = new OO; echo "$o->a: $o->a\n"; // $o->a: 111 echo "$o->b: $o->b\n"; // $o->b: 9 echo "$o->c: $o->c\n"; // $o->c: 42 echo "$o->d: $o->d\n"; // $o->d:
// ajouter une nouvelle valeur au membre $elem, en programmation OOP $o->x = 56;
// instantiation de la classe stdclass (elle existe par défaut en PHP 4) // $val n'est pas overloadée! $val = new stdclass; $val->prop = 555;
// Forcez "a" à être un tableau avec l'élément $val // Mais _set() forcera cet élément dans le tableau $elem $o->a = array($val); var_dump($o->a[0]->prop);
?>
|
|
- Table des matières
- overload -- Active la couche de contrôle des membres et méthodes
|