06/06/2011

Objet : accéder au grand parent en PHP

S'il est courant de surcharger une méthode parente en PHP, il est plus rare d'accéder directement à la classe "grand -mère" sans passer par la mère. Pourtant... c'est possible, et voici comment :-)

En effet, un héritage de PHP 4 permet préserver le contexte d'exécution de la classe fille quand on appelle une classe parente en utilisant son nom plutôt que l'opérateur "parent" (qui n'existait pas avant). Un exemple tout simple :

class GrandMother {
    protected $_myVar = '5';

    public function doSomething() {
        echo "GrandMother, value is " . $this->_myVar;
    }
}

class Mother extends GrandMother {

    public function doSomething() {
        echo 'Mother, value is '; // Never called
    }
}

La classe fille n'utilise pas "parent", mais directement le nom de la classe grand-mère :

class Child extends Mother {

    public function doSomething() {
        $this->_myVar = '20';
        return GrandMother::doSomething();
    }
}

Il ne reste plus qu'à tester :

$oObject = new Child;
$oObject->doSomething();
// affiche "GrandMother, value is 20"

A utiliser avec précaution et modération ;-)

blog comments powered by Disqus