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> |