web-dev-qa-db-fra.com

Appeler une méthode parente substituée

Dans l'exemple de code ci-dessous, la méthode test() dans la classe parent Foo est remplacée par la méthode test() dans la classe enfant Bar. Est-il possible d'appeler Foo::test() à partir de Bar::test()?

class Foo 
{
  $text = "world\n";

  protected function test() {
    echo $this->text;
  }
}// class Foo

class Bar extends Foo 
{
  public function test() {
    echo "Hello, ";

    // Cannot use 'parent::test()' because, in this case,
    // Foo::test() requires object data from $this
    parent::test();
  }
}// class Bar extends Foo

$x = new Bar;
$x->test();
22
kiler129

Utilisez parent:: avant le nom de la méthode, par exemple.

parent::test();

Voir parent

32
Adam Zalcman
4

L'appel d'une méthode parent peut être considéré comme une mauvaise pratique ou une odeur de code et peut indiquer une logique de programmation pouvant être améliorée de manière à ce que l'enfant ne soit pas obligé d'appeler le parent. Une bonne description générique est fournie par Wikipedia .

Une implémentation sans appel du parent ressemblerait à ceci:

abstract class Foo
{
    $text = "world\n";

    public function test() {
        $this->test_child();
        echo $this->text;
    }

    abstract protected function test_child();
}// class Foo

class Bar extends Foo
{
    protected function test_child() {
        echo "Hello, ";
    }
}// class Bar extends Foo

$x = new Bar;
$x->test();
0
Grapestain