Héritage
Définition : Héritage
L'héritage permet à une classe (enfant) de "hériter" de toutes les propriétés et méthodes publiques et protégées d'une autre classe (parent). Cela évite la duplication de code. On utilise le mot-clé extends.

class Mere
{public $attr;
public function __construct($attr){
$this->attr = $attr;
}
public function meth(){
return $this->attr;
}
}
class Fille extends Mere
{}
$element1 = new Fille(5);
$element2 = new Fille(10);
var_dump($element1); // attr = 5
var_dump($element2); // attr = 10
echo $element1->meth(); // affiche 5
Chaque instance de classe crée ses propres propriétés héritées de la classe mère.
Les instances ont accès aux méthodes de la classe mère.
Définition : Redéfinition de méthodes : parent
Une classe enfant peut redéfinir (surcharger) une méthode héritée de son parent pour en modifier le comportement.
Pour appeler la méthode originale du parent (par exemple, pour l'étendre au lieu de la remplacer), on utilise le mot-clé parent::.

class Mere
{public function meth1(){
return 'meth1 de classe Mere';
}
}
class Fille extends Mere
{public function meth1(){
return 'meth1 de classe Fille';
}
public function meth2(){
return parent::meth1();
}
}
$element = new Fille;
echo $element->meth1(); // affiche meth1 de classe Fille
echo $element->meth2(); // affiche meth1 de classe Mère
Pour redéfinir une méthode parent, vous devez respecter scrupuleusement son "contrat" :
Elle ne doit pas être
final.La visibilité doit être égale ou augmentée (ex:
protected->public).Le type de retour doit être égal ou plus précis (ex:
Animal->Chien).Les types des paramètres doivent être égaux ou plus larges (ex:
Chien->Animal).Le nombre de paramètres doivent être égaux ou optionnel ((a, b) -> (a, b, c=10))
Son état
static(ou non-static) ne doit pas changer.
Définition : Attributs et méthodes statiques
Par défaut, les attributs et méthodes appartiennent à l'instance. Si on veut qu'ils appartiennent à la classe elle-même (partagés par toutes les instances), on utilise le mot-clé static.
On y accède avec l'opérateur :: (double deux-points) 25, et on utilise self:: à l'intérieur de la classe.

class Mere
{public static $attr;
public static function setAttr($attr){
self::$attr = $attr;
}
public function getAttr(){
return self::$attr;
}
}
class Fille extends Mere
{}
Mere::setAttr(10); // attr = 10 partagé par toutes les instances
$element = new Fille;
echo $element->getAttr(); // affiche 10
self : représente la classe à l'intérieur d'elle-même.
Mere : à l'extérieur de la classe, on l'appelle par son nom.
:: : permet d'accéder aux éléments statiques.
Définition : Méthode __construct
On peut redéfinir la méthode __construct de la classe mère et y faire appel.

class Mere
{public $attr1;
public function __construct($attr1){
$this->attr1 = $attr1;
}
}
class Fille extends Mere
{public $attr2;
public function __construct($attr1, $attr2){
parent::__construct($attr1);
$this->attr2 = $attr2;
}
}
$element = new Fille(10,5);
var_dump($element);
Le nombre de paramètres peut être différent.