Une classe décrit un objet : ses données (propriétés) et ses comportements (méthodes). On crée une instance avec new.
<?php
declare(strict_types=1);
final class Cours
{
public function __construct(
public readonly string $titre,
private int $minutes = 10,
) {
}
public function allonger(int $minutes): void
{
$this->minutes += $minutes;
}
public function minutes(): int
{
return $this->minutes;
}
}
$cours = new Cours('PHP objet');
$cours->allonger(5);
echo $cours->minutes(); // 15
Ce qui se passe dans cet exemple
- Constructeur avec promotion : écrire
public readonly string $titredans la signature déclare et initialise la propriété. readonly: la propriété est assignée une fois, puis ne peut plus être modifiée.private:minutesn'est modifiable que par les méthodes de la classe. C'est l'encapsulation.final: la classe ne peut pas être étendue.
Interfaces
Une interface décrit ce qu'une classe sait faire, sans dire comment.
interface Exportable
{
public function exporter(): string;
}
Symfony s'appuie beaucoup sur ce principe : tu dépends d'une interface, et le framework te fournit l'implémentation.
À retenir
- Garde les propriétés
privateet expose des méthodes. - Une classe a une responsabilité claire.
- Préfère injecter les dépendances par le constructeur plutôt que créer des objets partout avec
new.