Künstlerische Darstellung im Stil von Monet: Ein blauer Elefant mit dem Schriftzug SOLID steht in einer Abendszene am Wasser. Links ein Baum mit punktförmigen Blättern, rechts ein Sonnenuntergang, dessen goldenes Licht sich im Wasser spiegelt. Der Elefant ist mit sternenartigen Punkten übersät. Im Vordergrund blauer Wildwuchs mit kleinen leuchtenden Blüten. Berge im Hintergrund vervollständigen die Szene in verschiedenen Blautönen. Die gesamte Komposition ist im pointillistischen Stil gehalten. Ai generiert.

SOLID-Prinzipien in PHP – Clean Code durch Refactoring

Die SOLID-Prinzipien sind ein zentraler Bestandteil der Softwareentwicklung, um sauberen, wartbaren und erweiterbaren Code zu schreiben. Besonders in PHP-Projekten, die oft über Jahre gewachsen sind, helfen diese Prinzipien, technische Schulden zu reduzieren und die Codequalität zu verbessern. In diesem Glossar-Eintrag zeigen wir euch, wie ihr die SOLID-Prinzipien in PHP anwendet, stellen bewährte Tools vor und geben praktische Code-Beispiele. Als Experten unterstützen wir euch gerne mit Remote-Pair-Programming-Sessions oder übernehmen das Refactoring komplett für euch.

Ziele der SOLID-Prinzipien

Die SOLID-Prinzipien sind eine Sammlung von Best Practices, die euch helfen, sauberen und wartbaren Code zu schreiben. Die Ziele sind:

  1. Single Responsibility: Jede Klasse oder Methode hat nur eine einzige Verantwortung.
  2. Open / Closed: Klassen sind offen für Erweiterungen, aber geschlossen für Modifikationen.
  3. Liskov Substitution: Abgeleitete Klassen können die Basisklasse ersetzen, ohne das Verhalten zu ändern.
  4. Interface Segregation: Kleine, spezifische Interfaces sind besser als große, allgemeine.
  5. Dependency Inversion: Abhängigkeiten sollten auf Abstraktionen basieren, nicht auf konkreten Implementierungen.
CYPRESS.IO Ambassador und IT Consultant für QA Engenieering und Qualität in PHP Projekten.

Erreichen Sie unsere PHP Consultant Spezialisten

Wir sind Experten für PHP und helfen Ihnen, Ihre digitalen Herausforderungen zu meistern. Unser erfahrenes Team unterstützt Sie bei PHP Updates, PHP Refactoring und berät Sie remote zu allen Fragen rund um PHP. Mit unseren vollautomatischen CI/CD Deployments und einer robusten Docker-Infrastruktur bringen wir Ihre PHP-Projekte auf das nächste Level. Vertrauen Sie auf unsere Expertise für zuverlässige und skalierbare PHP-Lösungen.

Tools zur Anwendung der SOLID-Prinzipien

Um die SOLID-Prinzipien effektiv anzuwenden, könnt ihr folgende Tools nutzen:

PHPStan:

  • Funktion: Statische Code-Analyse, um Verstöße gegen SOLID zu erkennen.
  • Vorteil: Hilft euch, Single Responsibility und Dependency Inversion zu überprüfen.
  • Integration: Läuft über die Kommandozeile und kann in CI/CD-Pipelines integriert werden.

Psalm:

  • Funktion: Ähnlich wie PHPStan, aber mit Fokus auf Typensicherheit.
  • Vorteil: Bietet detaillierte Berichte über potenzielle Probleme im Code.
  • Integration: Einfache Integration in bestehende Projekte via Composer.

Rector PHP:

  • Funktion: Automatisiertes Refactoring-Tool, das Code nach SOLID-Prinzipien umwandelt.
  • Vorteil: Spart Zeit durch automatische Code-Verbesserungen.
  • Integration: Läuft über die Kommandozeile und kann in CI/CD-Pipelines integriert werden.

PHP CodeSniffer:

  • Funktion: Überprüft den Code auf Einhaltung von Coding-Standards (z.B. PSR-12).
  • Vorteil: Hilft, konsistenten Code zu schreiben.
  • Integration: Läuft über die Kommandozeile und kann in CI/CD-Pipelines integriert werden.

Code-Beispiele: Vorher und Nachher

Hier zeigen wir euch ein praktisches Beispiel, wie ihr die SOLID-Prinzipien in PHP anwendet.

Vorher: Verstoß gegen Single Responsibility und Open/Closed

Code:
          

class OrderProcessor {
   public function process($order) {
       // Validierung
       if (empty($order['items'])) {
           throw new Exception("Order is empty");
       }

       // Berechnung
       $total = 0;
       foreach ($order['items'] as $item) {
           $total += $item['price'] * $item['quantity'];
       }

       // Speicherung
       $this->saveToDatabase($order, $total);

       // Benachrichtigung
       $this->sendConfirmationEmail($order);
   }

   private function saveToDatabase($order, $total) {
       // Datenbanklogik
   }

   private function sendConfirmationEmail($order) {
       // E-Mail-Logik
   }
}

Nachher: Refaktorierter Code mit SOLID-Prinzipien

Code:
          

class OrderValidator {
   public function validate(array $order): void {
       if (empty($order['items'])) {
           throw new Exception("Order is empty");
       }
   }
}

class OrderCalculator {
   public function calculateTotal(array $items): float {
       return array_reduce($items, fn($carry, $item) => $carry + ($item['price'] * $item['quantity']), 0);
   }
}

class OrderRepository {
   public function save(array $order, float $total): void {
       // Datenbanklogik
   }
}

class EmailService {
   public function sendConfirmation(array $order): void {
       // E-Mail-Logik
   }
}

class OrderProcessor {
   public function __construct(
       private OrderValidator $validator,
       private OrderCalculator $calculator,
       private OrderRepository $repository,
       private EmailService $emailService
   ) {}

   public function process(array $order): void {
       $this->validator->validate($order);
       $total = $this->calculator->calculateTotal($order['items']);
       $this->repository->save($order, $total);
       $this->emailService->sendConfirmation($order);
   }
}

Erklärung:

  • Single Responsibility: Jede Klasse hat nur eine einzige Verantwortung (Validierung, Berechnung, Speicherung, Benachrichtigung).
  • Open/Closed: Neue Funktionen können hinzugefügt werden, ohne den bestehenden Code zu ändern.
  • Dependency Inversion: Abhängigkeiten werden über Konstruktor-Injection injiziert, was die Testbarkeit verbessert.

10 FAQs zu SOLID-Prinzipien in PHP

Was sind die SOLID-Prinzipien?

Es sind fünf Prinzipien, die euch helfen, sauberen und wartbaren Code zu schreiben.

Warum sind SOLID-Prinzipien wichtig?

Sie machen Code lesbarer, wartbarer und erweiterbarer.

Wie wende ich Single Responsibility an?

Jede Klasse oder Methode sollte nur eine einzige Verantwortung haben.

Was bedeutet Open/Closed?

Klassen sollten offen für Erweiterungen, aber geschlossen für Modifikationen sein.

Wie teste ich SOLID-konformen Code?

Durch Dependency Injection und Unit-Tests könnt ihr SOLID-konformen Code einfach testen.

Kann ich SOLID-Prinzipien automatisieren?

Ja, Tools wie Rector helfen dabei, Code nach SOLID-Prinzipien umzuwandeln.

Was ist Dependency Inversion?

Abhängigkeiten sollten auf Abstraktionen basieren, nicht auf konkreten Implementierungen.

Wie erkenne ich Verstöße gegen SOLID?

Tools wie PHPStan und Psalm helfen euch dabei.

Kann SOLID die Performance verbessern?

Nicht direkt, aber es macht den Code wartbarer und erweiterbarer.

Unterstützt ihr uns bei der Anwendung von SOLID?

Ja, wir bieten Remote-Pair-Programming-Sessions und übernehmen auch komplettes Outsourcing für Refactoring.

Fazit

Die SOLID-Prinzipien sind ein unverzichtbarer Bestandteil der Softwareentwicklung, um sauberen, wartbaren und erweiterbaren Code zu schreiben. Mit den richtigen Tools und Best Practices könnt ihr euren PHP-Code deutlich verbessern. Als Experten unterstützen wir euch gerne mit Remote-Pair-Programming-Sessions oder übernehmen das Refactoring komplett für euch. Kontaktiert uns, um mehr zu erfahren!