Manuel PHP
Précédent | Chapitre 19. Les classes et les objets (PHP 5) | Suivant

# Surcharge

Les appels de méthodes et l'accès aux membres peuvent être surchargés via les méthodes __call(), __get() et __set(). Ces méthodes ne seront déclenchées que si votre objet, hérité ou non, ne contient pas le membre ou la méthode auquel vous tentez d'accéder.

## Surcharge de membre

void __set ( string name, mixed value )
mixed __get ( mixed name )

Les membres d'une classe peuvent être surchargés afin d'exécuter un code spécial contenu dans vos méthodes __set() et __get(). Le paramètre $name est le nom de la variable qui doit être définie ou recherchée. Le paramètre $valeur de la méthode __set() spécifie la nouvelle valeur à donner à la variable $name.

Exemple 19-19. Exemple de surcharge avec __get et __set

`<?php
class Setter
{
public $n;
private $x = array("a" => 1, "b" => 2, "c" => 3);
function __get($nm)
{
print "Récupération de [$nm]\n";
if (isset($this->x[$nm])) {
$r = $this->x[$nm];
echo "Retour : $r\n";
return $r;
} else {
echo "Rien!\n";
}
}
function __set($nm, $val)
{
print "Définition de [$nm] à $val\n";
if (isset($this->x[$nm])) {
$this->x[$nm] = $val;
echo "OK!\n";
} else {
echo "Pas OK!\n";
}
}
}
$foo = new Setter();
$foo->n = 1;
$foo->a = 100;
$foo->a++;
$foo->z++;
var_dump($foo);
?>`

L'exemple ci-dessus va afficher :

    Définition de [a] à 100
    OK!
    Récupération de [a]
    Retour : 100
    Définition de [a] à 101
    OK!
    Récupération de [z]
    Rien!
    Définition de [z] à 1
    Pas OK!
    object(Setter)#1 (2) {
      ["n"]=>
      int(1)
      ["x:private"]=>
      array(3) {
        ["a"]=>
        int(101)
        ["b"]=>
        int(2)
        ["c"]=>
        int(3)
      }
    }

## Surcharge de méthode

mixed __call ( string name, array arguments )

Les méthodes d'une classe peuvent être surchargées pour exécuter un code spécial contenu dans votre méthode __call(). Le paramètre $name utilisé est le nom de la fonction que l'on souhaite utiliser. Les arguments qui étaient passés à la fonction sont récupérés dans un tableau contenu dans le paramètre $arguments. La valeur retournée par la méthode __call() sera celle retournée au point d'appel de la méthode d'origine.

Exemple 19-20. Exemple de surcharge avec __call

`<?php class Caller { private $x = array(1, 2, 3); function __call($m, $a) { print "Méthode $m appelée :\n"; var_dump($a); return $this->x; } } $foo = new Caller(); $a = $foo->test(1, "2", 3.4, true); var_dump($a); ?>`

L'exemple ci-dessus va afficher :

`Méthode test appelée : array(4) { [0]=> int(1) [1]=> string(1) "2" [2]=> float(3.4) [3]=> bool(true) } array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }`

Précédent | Sommaire | Suivant
Interfaces | Niveau supérieur | Parcours d'objets