SOLID-Prinzipien in PHP: Theorie und Praxis – vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

SOLID-Prinzipien in PHP: Theorie und Praxis



SOLID sind fünf fundamentale Prinzipien der objektorientierten Programmierung, formuliert von Robert Martin. Sie helfen dabei, flexiblen, wartbaren und skalierbaren Code zu erstellen. In diesem Artikel analysieren wir jedes Prinzip anhand von PHP-Beispielen, von einfachen Konzepten bis hin zu realen praktischen Szenarien.



1. Single Responsibility Principle (SRP) — Prinzip der einzigen Verantwortung



Formulierung: Eine Klasse sollte nur einen einzigen Grund für eine Änderung haben. Mit anderen Worten, jede Klasse ist nur für eine einzige Aufgabe oder Funktionalität verantwortlich.



Ein Verstoß gegen SRP führt oft zu "göttlichen Objekten", die zu viel wissen und tun. Betrachten wir ein schlechtes Beispiel:



class Report {    public function generate($data) {        // Bericht generieren        return "Bericht: " . json_encode($data);    }

public function saveToFile($filename, $content) { file_put_contents($filename, $content); }

public function sendEmail($to, $subject, $body) { mail($to, $subject, $body); }}


Hier ist die Klasse Report für die Generierung, Speicherung und den Versand verantwortlich — drei verschiedene Verantwortlichkeiten. Beheben wir dies:



class ReportGenerator {    public function generate($data) {        return "Bericht: " . json_encode($data);    }}

class FileSaver { public function save($filename, $content) { file_put_contents($filename, $content); }}

class EmailSender { public function send($to, $subject, $body) { mail($to, $subject, $body); }}

// Verwendung$report = new ReportGenerator();$content = $report->generate($data);

$saver = new FileSaver();$saver->save('report.txt', $content);

$sender = new EmailSender();$sender->send('admin@example.com', 'Bericht fertig', $content);


Praktischer Tipp: Wenn Sie im Klassennamen die Konjunktion "und" sehen (z.B. UserAndLogger), ist dies ein sicheres Zeichen für einen Verstoß gegen SRP.



2. Open-Closed Principle (OCP) — Prinzip der Offenheit/Geschlossenheit



Formulierung: Klassen sollten für Erweiterungen offen, aber für Modifikationen geschlossen sein. Sie sollten in der Lage sein, neue Funktionalität hinzuzufügen, ohne vorhandenen Code zu ändern.



Ein Verstoß gegen OCP liegt vor, wenn das Hinzufügen eines neuen Typs eine Änderung vorhandener Klassen erfordert. Beispiel für schlechten Code:



class PaymentProcessor {    public function process($type, $amount) {        if ($type === 'credit_card') {            // Kreditkarte verarbeiten        } elseif ($type === 'paypal') {            // PayPal verarbeiten        } elseif ($type === 'crypto') {            // Kryptowährung verarbeiten        }        // Hinzufügen eines neuen Typs = Änderung dieser Klasse    }}


Die Lösung — Polymorphismus über Interfaces verwenden:



interface PaymentMethod {    public function process($amount);}

class CreditCardPayment implements PaymentMethod { public function process($amount) { echo "Kreditkarte über $amount verarbeiten"; }}

class PayPalPayment implements PaymentMethod { public function process($amount) { echo "PayPal über $amount verarbeiten"; }}

class PaymentProcessor { public function process(PaymentMethod $method, $amount) { $method->process($amount); }}

// Verwendung$processor = new PaymentProcessor();$processor->process(new CreditCardPayment(), 100);$processor->process(new PayPalPayment(), 200);


Jetzt erfordert das Hinzufügen einer neuen Zahlungsmethode (z.B. ApplePayPayment) keine Änderung von PaymentProcessor.



3. Liskov Substitution Principle (LSP) — Liskovsches Substitutionsprinzip



Formulierung: Objekte von Unterklassen sollten durch Objekte der Basisklasse austauschbar sein, ohne

Blogs

Buchempfehlungen