L’Abstraction en PHP5
Ce concept suit l’héritage, elle permet d’obliger des méthodes à être disponible dans les classes filles. Les classes abstraites ne peuvent être instanciées.
Classe abstraite
Une classe dite abstraite ne peut être instanciée, elle doit être dérivée pour pouvoir être utilisée. Elles permettent de spécifier les membres que devront obligatoirement posseder les classes dérivées
Méthode abstraite
Une méthode abstraite est similaire à une classe abstraite mais restreint à la méthode. Une classe abstraite contenant une méthode abstraite devient elle meme abstraite. Elles devront être obligatoirement vides afin d’obliger les filles à surdéfinir ses méthodes. Si ces dernieres ne le sont pas, PHP retournera une erreur
Syntaxe
Pour définir une méthode ou classe abstraite, on utilisera le mot clé abstract
abstract class nomClass
{
abstract [public] function nomMethode([...]);
}
Lorsqu’une fille surdéfinie une méthode, elle ne peut rendre la visibilité que public
L’opposition à abstract
Pour empecher la classe d’etre dérivée, on utilisera final qui peut également se placer devant les méthodes.
final class nomClass
{
final [public|private] function nomMethode([...]);
}
Notes
Quels type d’erreur j’obtient lorsque j’instancie une classe abstract?
Fatal error: Cannot instantiate abstract class foo
Quels type d’erreur j’obtient si je ne surdéfinie pas une methode abstraite d’une classe non abstraite?
Fatal error: Class baz contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (foo::bar)
Que se passe t’il lorsque je définit une méthode private/protected sur une abstract?
Fatal error: Abstract function foo::bar() cannot be declared private
Pas d’erreur pour protected
Que se passe t’il si je tente de surdéfinir une methode final?
Fatal error: Non-abstract method baz::foobar() must contain body
Puis-je mélanger une classe abstraite et des méthodes final?
Rien
Puis-je mélanger une classe final et des méthodes abstraite?
Fatal error: Class foo contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (foo::bar)
Commentaires récents