Clean Code en PHP : principes d'écriture de code propre avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que le Clean Code et pourquoi est-ce important en PHP ?



Le Clean Code (code propre) n'est pas simplement un terme à la mode, mais une philosophie de développement qui aide à écrire des programmes compréhensibles non seulement par la machine, mais aussi par l'humain. Dans le contexte de PHP, où le code est souvent maintenu pendant des années par différentes équipes, suivre les principes du code propre devient une compétence cruciale.



Le code propre possède plusieurs caractéristiques clés :

  • Il est facile à lire et à comprendre sans commentaires
  • Il est prévisible et ne provoque pas de "surprises" lors de l'exécution
  • Il est facile à modifier sans risquer de casser d'autres parties du système
  • Il contient un minimum de duplication (principe DRY)


Dans cet article, nous allons analyser les principes fondamentaux du Clean Code avec des exemples concrets de code PHP.



1. Nommage des variables et des fonctions



Mauvais exemple : qu'est-ce qui ne va pas avec ce code ?

// ❌ Mauvais code$a = 5;$b = 10;$c = $a * $b;

function calc($x, $y) { return $x + $y * 0.2;}

$d = calc($a, $b);


Dans cet exemple, il est totalement incompréhensible ce que signifient les variables $a, $b, $c et ce que fait la fonction calc. Dans un mois, vous ne vous souviendrez même pas pourquoi vous avez écrit ce code.



Bon exemple : des noms significatifs

// ✅ Bon code$productPrice = 5;$quantity = 10;$totalCost = $productPrice * $quantity;

function calculatePriceWithTax(float $basePrice, float $taxRate = 0.2): float { return $basePrice + ($basePrice * $taxRate);}

$finalPrice = calculatePriceWithTax($totalCost);


Règles de nommage en PHP :

  • Utilisez des noms pour les variables ($userName, $orderTotal)
  • Utilisez des verbes pour les fonctions (getUser(), calculateTotal())
  • N'abrégez pas les noms (écrivez $customerAddress, pas $custAddr)
  • Évitez les variables à une seule lettre (sauf pour les compteurs de boucle $i, $j)
  • Les variables booléennes commencent par is, has, can ($isActive, $hasPermission)


2. Petites fonctions et principe de responsabilité unique (SRP)



Problème : la fonction couteau suisse

// ❌ Mauvais code : la fonction fait tout à la foisfunction processOrder(array $orderData): array {    // Validation    if (empty($orderData['email'])) {        throw new Exception('Email required');    }        // Sauvegarde en BDD    $pdo = new PDO('mysql:host=localhost;dbname=shop', 'root', '');    $stmt = $pdo->prepare("INSERT INTO orders (email, total) VALUES (?, ?)");    $stmt->execute([$orderData['email'], $orderData['total']]);        // Envoi d'email    mail($orderData['email'], 'Order confirmed', 'Thank you!');        // Journalisation    file_put_contents('log.txt', 'Order processed: ' . date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);        return ['status' => 'success'];}


Cette fonction viole le principe de responsabilité unique (Single Responsibility Principle). Elle s'occupe de la validation, du travail avec la BDD, de l'envoi d'email et de la journalisation. Tout changement dans l'un de ces processus nécessitera de modifier toute la fonction.



Solution : décomposition en petites fonctions

// ✅ Bon code : chaque fonction est responsable d'une seule actionfunction validateOrderData(array $orderData): void {    if (empty($orderData['email'])) {        throw new InvalidArgumentException('Email is required');    }}

function saveOrderToDatabase(array $orderData): int { $pdo = new PDO('mysql:host=localhost;dbname=shop', 'root', ''); $stmt = $pdo->prepare("INSERT INTO orders (email, total) VALUES (?, ?)"); $stmt->execute([$orderData['email'], $orderData['total']]); return (int)$pdo->lastInsertId();

Blogs

Book Recommendations