41 votes

Classe abstraite php étendant une autre classe abstraite

Est-il possible en PHP qu'une classe abstraite hérite d'une classe abstraite ?

Par exemple,

abstract class Generic {
    abstract public function a();
    abstract public function b();
}

abstract class MoreConcrete extends Generic {
    public function a() { do_stuff(); }
    abstract public function b(); // I want this not to be implemented here...
}

class VeryConcrete extends MoreConcrete {
    public function b() { do_stuff(); }

}

( La classe abstraite étend la classe abstraite en php ? ne donne pas de réponse)

42voto

arnaud576875 Points 35281

Oui, c'est possible.

Si une sous-classe n'implémente pas toutes les méthodes abstraites de la superclasse abstraite, elle doit également être abstraite.

5voto

matino Points 7349

Oui, c'est possible, mais votre code ne fonctionnerait pas si vous appeliez $VeryConcreteObject->b()

Ici est une explication plus détaillée.

5voto

user2806167 Points 51

Cela fonctionnera, même si vous laissez la fonction abstraite b() ; dans la classe MoreConcrete.

Mais dans cet exemple précis, je transformerais la classe "Générique" en une interface, car elle n'a pas d'autre implémentation que les définitions de méthodes.

interface Generic {
    public function a(); 
    public function b();
}

abstract class MoreConcrete implements Generic {
    public function a() { do_stuff(); }
    // can be left out, as the class is defined abstract
    // abstract public function b();
}

class VeryConcrete extends MoreConcrete {
    // this class has to implement the method b() as it is not abstract.
    public function b() { do_stuff(); }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X