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. À l'intérieur de ces méthodes, l'overloading est désactivé, pour que vous puissiez accéder à l'objet.
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.
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 1789. 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
);
?>