L'héritage est un principe fondamental de la programmation orientée objet, elle permet à une nouvelle classe de posséder les caractéristiques d'une autre appelée super-classe ou classe générique. La classe ayant héritée d'une autre, est quant à elle dénommée sous-classe, classe étendue ou classe dérivée
L'héritage de classe se réalise par l'intermédiaire de l'instruction extends.
class super_classe { // Déclarations des attributs var $attribut_1; var $... var $attribut_N; // Déclarations des fonctions function nom_fonction_1 (param_1, ..., param_N) { //bloc d'instructions... } ... function nom_fonction_N (param_1, ..., param_N) { //bloc d'instructions... } } class sous_classe extends super_classe { // Déclarations des nouveaux attributs var $attribut_1; var $... var $attribut_N; // Déclarations des nouvelles fonctions function nom_fonction_1 (param_1, ..., param_N) { //bloc d'instructions... } ... function nom_fonction_N (param_1, ..., param_N) { //bloc d'instructions... } }
Une classe dérivée hérite de l'ensemble des membres de sa super-classe. La sous-classe peut ainsi définir de nouveaux membres qui ajouteront de nouvelles fonctionnalités à celles existantes, mais aussi de redéfinir des membres hérités à l'aide de la surcharge.
Le langage PHP ne supporte pas l'héritage multiple, c'est-à-dire qu'une classe ne peut hériter que d'une seule et unique classe.
Exemple [voir]<html> <body> <?php class Chaine { public $valeur; public $date; public function __construct(){ $this->valeur = func_get_arg(0); $this->date = date(Personne::MASQUE_DATE); } public function set($valeur){ $this->valeur = $valeur; } public function get(){ return $this->valeur; } public function __toString(){ return '[' . $this->valeur . ']'; } } class Personne { const MASQUE_DATE = 'd M Y H:i:s'; static $compteur; private $date_inscription; private $date_modification; private $id; private $civilite; private $nom; private $prenom; private $adresse; private $telephone; public function __construct( $civilite, $nom, $prenom, $adresse, $telephone){ $this->date_inscription = new Chaine(date(self::MASQUE_DATE)); $this->civilite = new Chaine($civilite); $this->nom = new Chaine($nom); $this->prenom = new Chaine($prenom); $this->adresse = new Chaine($adresse); $this->telephone = new Chaine($telephone); $this->date_modification = new Chaine($this->date_inscription->get()); $this->idModif(); } public function __toString(){ return '[' . $this->civilite->get() . ', ' . $this->nom->get() . ', ' . $this->prenom->get() . ', ' . $this->adresse->get() . ', ' . $this->telephone->get() . ', ' . $this->date_inscription->get() . ', ' . $this->date_modification->get() . ', ' . $this->id->get() . ']'; } public function setNom($nom){ $this->nom->set($nom); $this->dateModif(); $this->idModif(); } public function setPrenom($prenom){ $this->prenom->set($prenom); $this->dateModif(); $this->idModif(); } public function setAdresse($adresse){ $this->adresse->set($adresse); $this->dateModif(); } public function setTelephone($telephone){ $this->telephone->set($telephone); $this->dateModif(); } private function dateModif(){ $this->date_modification->set(date(self::MASQUE_DATE)); } private function idModif(){ $this->id = new Chaine(self::$compteur++ . date('dmy') . '.' . $this->nom->get() . '_' . substr($this->prenom, 0, 1)); } public function __clone(){ $this->date_inscription = new Chaine(date(self::MASQUE_DATE)); $this->civilite = new Chaine($this->civilite->get()); $this->nom = new Chaine($this->nom->get()); $this->prenom = new Chaine($this->prenom->get()); $this->adresse = new Chaine($this->adresse->get()); $this->telephone = new Chaine($this->telephone->get()); $this->date_modification = new Chaine($this->date_inscription->get()); $this->idModif(); } } class Employe extends Personne { public $specialite; public $service; public $date_embauche; public function __construct($civilite, $nom, $prenom, $adresse, $telephone, $specialite, $service){ //Appel du constructeur de la super-classe à l'aide de parent:: parent::__construct($civilite, $nom, $prenom, $adresse, $telephone); $this->specialite = new Chaine($specialite); $this->service = new Chaine($service); $this->date_embauche = new Chaine(date(parent::MASQUE_DATE)); } //Surcharge public function __toString(){ //Appel d'une méthode de la super-classe à l'aide de parent:: return '[' . parent::__toString() .', ' . $this->specialite->get() . ', ' . $this->service->get() . ', ' . $this->date_embauche->get() . ']'; } } $employe = new Employe( 'Madame', 'Waldec', 'Anne', '75 rue Belleville 75010 Paris', '0142152432', 'Analyste/programmeur', 'Recherche et développement'); echo $employe; ?> </body> </html> |