Je travaille actuellement avec Prestashop, et pour les besoins d'un client, je m'occupe de surcharger certaines classes et certains controllers.
Dans l'un des controllers, j'ai était confronté à un problème que je n'avais encore jamais eu: appeler une fonction dans une classe ancêtre, sans passer par le parent... Le tout, sans modifier ni le parent, ni l'ancêtre.
Un peu de mal à comprendre ? Utilisons un exemple: imaginons que l'on ait trois classes: A, B et C. Les classes A et B ne peuvent être modifiées. La classe C hérite obligatoirement de B.
class A {
public function fct($param) {
$result = $param + $param;
return $result;
}
}
class B extends A {
public function fct($param) {
$result = parent::fct($param);
return $result + $param;
}
}
class C extends B {
public function fct($param) {
// Doit retourner ($param + $param) * $param; // C'est-à-dire fct($param) dans A, * $param
}
}
Problème: appeler la fonction fct
de la classe A, sans passer par la classe B.
Solution: PHP est génial! C'est prévu dans la version 5.3.2. Il faut juste mettre le nom de la classe avant d'appeler le parent.
class C extends B {
public function fct($param) {
$result = A::fct($param);
return $result * $param;
}
}
Et voilà: on bypass la classe B aussi simplement que ça !
Aucun commentaire:
Enregistrer un commentaire