Skip to content

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é $name est 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éeAccessible depuis la classeAccessible depuis une classe héritéeAccessible 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 private ou protected pour 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 public aux é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.