Héritage et objets
En vidéo :
On parle d'héritage quand une classe hérite d'une autre. C'est-à-dire qu'elle en récupère l'ensemble des propriétés et méthodes, à conditions qu'elles aient une visibilité public
ou protected
.
⚠️ En Php, une classe ne peut héritée que d'une classe.
Prenons le schéma suivant et voyons son implémentation en PHP :
Des types de bonnets sous-côtés
class EarflapBeanie extends Beanie
{
// À accès aux propriétés et aux méthodes de Beanie, mais uniquement si public ou protected
// Cette propriété n'existe que pour les objets EarflapBeanie
private bool $unePropriete;
// On peut également surcharger le constructeur (ou toute autre méthode de l'objet parent)
// pour ajouter des comportements
public function __construct()
{
// On peut appeler le constructeur du parent (pour en garder le fonctionnement)
parent::__construct();
// En général, on veut ajouter des comportements spécifiques après l'appel du constructeur parent
$this->unePropriete = true;
}
public function uneMethodeEnPlus()
{
// Cette méthode n'est pas utilisable sur un objet Beanie, mais uniquement par les objets EarflapBeanie
}
}
class SkullCap extends Beanie
{
private string $uneAutreProp;
}
Visibilité
En vidéo :
public
: la propriété / méthode est utilisable en dehors de l'objetprivate
: la propriété / méthode n'est pas utilisable en dehors de l'objetprotected
: la propriété / méthode n'est utilisable que par les classes enfants (voir section sur l'héritage)
class Beanie
{
protected ?string $name = null;
private bool $test = true;
public ?string $description = null;
}
class EarflapBeanie extends Beanie
{
// On peut utiliser / surcharger $this->name et $this->$description
// mais pas $this->test qui n'est disponible QUE dans les objets Beanie et pas leurs enfants
}
FQCN et get_class()
Il arrive qu'on ait besoin de récupérer le nom complet de notre classe (avec son namespace complet), qu'on appelle aussi FQCN (Fully Qualified Class Name). Pour cela, nous avons 2 moyens :
- la fonction
get_class()
qui retourne :- le nom complet de l'objet en cours, si utilisé dans une classe, sans paramètre (appel :
get_class()
) - le nom complet de l'objet passé en paramètre (appel :
get_class(new DateTime())
ouget_class($foo)
)
- le nom complet de l'objet en cours, si utilisé dans une classe, sans paramètre (appel :
NomDeLaClasse::class
qui nous permet de récupérer le FQCN directement à partir du nom de la classe
abstract class Bar
{
public function __construct()
{
// On récupère l'objet réellement en cours
var_dump(get_class($this));
// On récupère l'objet où la déclaration est faite
var_dump(get_class());
}
}
class Foo extends Bar {
}
$foo = new Foo();
var_dump(Foo::class); // Renvoie la même chose que get_class($foo)