Le design pattern Singleton est un patron de conception qui garantit qu’une classe n’a qu’une seule instance et fournit un point d’accès global à cette instance. Ce pattern est souvent utilisé lorsque une seule instance d’une classe doit être partagée à travers une application. Par exemple pour gérer une connexion à une base de données, un logger ou une configuration.
Caractéristiques du Singleton
- Instance unique : Une seule instance de la classe est créée durant l’exécution du programme.
- Contrôle d’accès : L’accès à cette instance se fait via une méthode statique.
- Constructeur privé : Empêche l’instanciation de la classe depuis l’extérieur.
- Stockage en variable statique : L’instance unique est stockée dans une variable statique.
Exemple concret en PHP : Singleton pour une connexion PDO
Prenons un exemple où nous utilisons le Singleton pour gérer une connexion PDO à une base de données MySQL.
Implémentation du Singleton

Explication du code
- Attribut statique
$instance
- Il stocke l’instance unique de la classe.
- Constructeur privé
__construct()
- Empêche l’instanciation depuis l’extérieur.
- Méthode statique
getInstance()
- Vérifie si une instance existe déjà. Si non, elle en crée une nouvelle.
- Retourne toujours la même instance.
- Méthode
getConnection()
- Fournit l’objet PDO pour interagir avec la base de données.
- Test d’égalité (
var_dump($db1 === $db2)
)- Vérifie que les deux instances obtenues sont identiques.
Avantages du Singleton
1. Optimisation mémoire : Évite d’instancier plusieurs objets inutiles.
2. Accès global contrôlé : Fournit un point d’accès unique et centralisé.
3. Facilite le partage de ressources : Utile pour la gestion des connexions, des logs, etc.
Inconvénients du Singleton
1. Difficulté à tester : Les tests unitaires sont plus compliqués, car le Singleton crée une dépendance cachée.
2. Risque de surcharge mémoire : Si l’instance unique conserve trop d’informations.
3. Couplage fort : Peut rendre le code moins flexible et moins évolutif.
Alternatives
- Injection de dépendances (DI) : Permet de gérer les instances via un conteneur de services.
- Registre global : Stocker des instances partagées dans un registre centralisé.
Résumé
Le Singleton en PHP est un bon choix pour gérer une seule instance d’un service, comme une connexion à une base de données. Toutefois, son utilisation doit être réfléchie pour éviter un couplage excessif et des problèmes de testabilité.