Encapsulation
Objectifs pédagogiques
- Comprendre le concept d'encapsulation.
- Définir la portée (
private,protected,public) des propriétés et méthodes. - Utiliser les accesseurs (
getters) et mutateurs (setters).
Qu'est-ce que l'encapsulation ?
L'encapsulation est un principe fondamental de la programmation orientée objet. Elle consiste à regrouper les données (attributs) et le comportement (méthodes) dans une même unité (la classe), tout en limitant l'accès direct à certaines données.
Elle permet :
- de protéger l'état interne d’un objet,
- de forcer le passage par des méthodes pour modifier cet état,
- d'éviter des modifications inattendues depuis l'extérieur.
Définir des propriétés privées
php
<?php
class Product {
private string $name;
public function setName(string $name): void {
$this->name = $name;
}
public function getName(): string {
return $this->name;
}
}
$product = new Product();
$product->setName('Clavier');
echo $product->getName();Explication
- La propriété
$nameest privée : elle ne peut être accédée que depuis la classe. setName()permet d'assigner une valeur à$name.getName()permet de lire sa valeur.- Ce mécanisme permet un meilleur contrôle sur les données, comme par exemple une validation dans
setName().
Portée des propriétés et méthodes
| Portée | Accessible depuis la classe | Accessible depuis une classe héritée | Accessible depuis l’extérieur |
|---|---|---|---|
private | ✅ | ❌ | ❌ |
protected | ✅ | ✅ | ❌ |
public | ✅ | ✅ | ✅ |
Validation dans un setter
php
<?php
class Product {
private int $price;
public function setPrice(int $price): void {
if ($price < 0) {
throw new Exception('Le prix ne peut pas être négatif');
}
$this->price = $price;
}
public function getPrice(): int {
return $this->price;
}
}Utilisation de $this
Dans une classe, la variable spéciale $this fait référence à l'objet courant. Elle permet d'accéder aux propriétés ou méthodes de l'instance :
php
<?php
class Product {
private string $name;
public function setName(string $name) {
$this->name = $name;
}
public function getName(): string {
return $this->name;
}
}
$product = new Product();
$product->setName("Laptop");
echo $product->getName(); // Affiche "Laptop"Bonnes pratiques
- Toujours préférer les propriétés
privateouprotectedpour mieux contrôler l’accès. - Créer des méthodes dites accesseurs (
get) et mutateurs (set) pour exposer ou modifier les données. - Réserver
publicaux éléments nécessaires à l’extérieur.
Conclusion
L'encapsulation est un principe central pour garantir la fiabilité et la maintenance du code. Elle impose une structure et des règles d'accès aux données de vos objets.