rechercher
rechercher
La définition du principe SOLID en PHP
php

La définition du principe SOLID en PHP

SOLID est un acronyme regroupant les 5 premiers principes majeurs de conception logicielle orientée objet (POO). Ces principes visent à améliorer la maintenabilité, la lisibilité, la flexibilité et la robustesse de votre code. Voyons comment ces principes s’appliquent au développement en PHP :

1. Single Responsibility Principle (SRP – Principe de responsabilité unique)

Ce principe stipule qu’une classe ne devrait avoir qu’une seule raison d’être modifiée. En PHP, cela signifie éviter les classes fourre-tout qui gèrent de nombreuses tâches disparates. Séparez les responsabilités en classes plus petites et plus ciblées.

Exemple violation SRP:

class User {

  public function createUser($data) {
    // Enregistre l'utilisateur en base de données
    // Envoie un email de bienvenue
    // Gère les permissions de l'utilisateur
  }
  
  public function getUser($id) {
    // Récupère les informations de l'utilisateur en base
  }
}

Application SRP:

class User {
  public function createUser($data) {
    // Enregistre l'utilisateur en base de données
  }
}

class WelcomeMailer {
  public function sendWelcomeEmail(User $user) {
    // Envoie un email de bienvenue
  }
}

class UserPermissions {
  public function setUserPermissions(User $user, $permissions) {
    // Gère les permissions de l'utilisateur
  }
}

2. Open/Closed Principle (OCP – Principe ouvert/fermé)

Ce principe stipule que les classes devraient être ouvertes à l’extension, mais fermées à la modification. En PHP, cela signifie que vous devriez pouvoir étendre les fonctionnalités d’un programme via l’héritage et les interfaces, sans avoir à modifier le code existant.

Exemple violation OCP:

class Database {
  public function connect() {
    // Connexion à la base MySQL
  }
  
  public function query($sql) {
    // Exécution de la requête MySQL
  }
}

// Si on veut ajouter une connexion à une autre base (ex: PostgreSQL)
// on devrait modifier la classe Database

Application OCP:

interface DatabaseConnection {
  public function connect();
}

class MysqlDatabase implements DatabaseConnection {
  public function connect() {
    // Connexion à la base MySQL
  }
  
  public function query($sql) {
    // Exécution de la requête MySQL
  }
}

class PostgresqlDatabase implements DatabaseConnection {
  public function connect() {
    // Connexion à la base PostgreSQL
  }
  
  public function query($sql) {
    // Exécution de la requête PostgreSQL (implémentation spécifique)
  }
}

// Utilisation via l'interface
function connectToDatabase(DatabaseConnection $connection) {
  $connection->connect();
}

3. Liskov’s Substitution Principle (LSP – Principe de substitution de Liskov)

Ce principe stipule que les sous-classes devraient pouvoir être substituées à leurs classes parentes sans altérer le fonctionnement du programme. En PHP, cela signifie que les sous-classes doivent respecter le contrat établi par la classe parente (signatures de méthodes, types de retour, exceptions).

Exemple violation LSP:

class Rectangle {
  public function getWidth() {
    return $this->width;
  }
  
  public function getHeight() {
    return $this->height;
  }
  
  public function getArea() {
    return $this->width * $this->height;
  }
}

class Square extends Rectangle {
  public function setWidth($width) {
    $this->width = $width;
    $this->height = $width; // Hypothèse carrée
  }
}

// Si on utilise un Square à la place d'un Rectangle dans le calcul d'aire
// on obtiendra un résultat faux car la hauteur n'est pas forcément égale à la largeur

4. Interface Segregation Principle (ISP – Principe de ségrégation des interfaces)

Ce principe stipule qu’il vaut mieux avoir plusieurs interfaces spécifiques et focalisées plutôt qu’une seule interface volumineuse. Cela permet aux clients (classes qui utilisent l’interface) de n’implémenter que les fonctionnalités dont ils ont besoin.

Exemple violation ISP:

interface DatabaseOperations {
  public function connect();
  public function query($sql);
  public function insert($data);
  public function update($data, $where);

Sources

rejoindre la discussion

Instagram

Instagram has returned empty data. Please authorize your Instagram account in the plugin settings .