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.