L'utilisation du modificateur abstract dans une déclaration de classe signifie qu'une ou plusieurs des méthodes à l'intérieur du corps de la classe sont déclarées comme abstraites.
abstract class NomClasse { modificateur Type NomMethode(); ... }
Si une méthode à l'intérieur de la classe est déclarée avec le modificateur abstract, alors cette classe doit être définie explicitement comme abstraite.
abstract class NomClasse { abstract modificateur nomMethode([$Parametres, ...]); ... }
Les classes déclarées avec le modificateur abstract ne peuvent être instanciées. Les classes abstraites contraignent les classes qui les étendent, à un comportement imposé. Les classes dérivées doivent fournir un bloc d'instructions pour chacune des méthodes abstraites héritées de la classe portant le modificateur abstract. La nouvelle classe dérivée pourra alors être instanciée.
abstract class NomClasse { modificateur NomMethode(); ... } class ClasseDerivee extends NomClasse { modificateur_acces nomMethode() { // Bloc d'instructions... } ... }
Une classe dérivée d'une classe abstraite doit impérativement implémenter toutes les méthodes abstraites de cette dernière, sinon elle doit porter le modificateur abstract dans sa déclaration.
Une interface pouvant être considérée comme étant une classe abstraite, une classe qui en implémente une doit être déclarée abstraite si toutes les méthodes de l'interface n'y sont pas implémentées.
Les classes abstraites sont utilisées pour fournir des méthodes et des variables communes à l'ensemble de leurs sous-classes.
Les classes abstraites, au contraire des interfaces, peuvent contenir des méthodes qui possèdent une implémentation.
abstract class Produit { public function getNom(); public function getReference(); public function getPrix(); public function __toString() { return '[' . $this->getNom() .', ' . $this->getReference() . ', ' . $this->getPrix() . ']'; } } class Livre extends Produit { private $titre; private $isbn; private $prix; private $description; $private $nb_pages; //... public function getNom(){ return $this->titre; } public function getReference(){ return $this->isbn; } public function getPrix(){ return $this->prix; } public function getDecription(){ return $this->description; } public function getNbPages(){ return $this->nb_pages; } //... } class DVDVideo extends Produit { private $titre; private $code_barre; private $prix; private $description; $private $duree; //... public function getNom(){ return $this->titre; } public function getReference(){ return $this->code_barre; } public function getPrix(){ return $this->prix; } public function getDecription(){ return $this->description; } public function getDuree(){ return $this->duree; } //... }