Einleitung: Warum „Clean Code“ nicht nur Pedanterie ist, sondern Zeit und Geld spart
\n\nStell dir vor, du öffnest ein altes PHP-Projekt, das vor einem Jahr geschrieben wurde. Du rufst die Datei index.php auf – und siehst ein Durcheinander aus HTML, SQL-Abfragen, echo-Befehlen und Funktionen mit Namen wie f1(). Kommt dir bekannt vor? Wenn ja, bist du entweder ein Anfänger, der gerade seine Reise beginnt, oder ein erfahrener Entwickler, der ein „Legacy“-Projekt geerbt hat.
Sauberer PHP-Code ist keine Modeerscheinung und keine Laune des Teamleads. Er ist ein Werkzeug, das Stunden, Nerven und Geld spart. In diesem Artikel zeigen wir dir, wie du deinen PHP-Code von einer „schmutzigen Skizze“ in ein „sauberes Endprodukt“ verwandelst, das dich und deine Kollegen begeistert. Wir sprechen über PSR-Standards, SOLID-Prinzipien, richtige Namensgebung und geben dir echte Beispiele. Los geht's!
\n\n1. Die Philosophie von Clean Code: Die wichtigsten Prinzipien
\n\nBevor wir in die Syntax eintauchen, legen wir die Spielregeln fest. Sauberer Code ist Code, der:
\n\n- \n
- Auch ohne Kommentare verständlich ist (obwohl Kommentare manchmal nötig sind). \n
- Sich leicht testen lässt. \n
- Keine Angst vor Refactoring hat. \n
- Einen einheitlichen Stil im gesamten Projekt einhält. \n
Robert C. Martin (Uncle Bob) sagte in seinem Buch „Clean Code“: „Der einzige Weg, schnell zu schreiben, ist, gut zu schreiben.“ Wenn du schnell und schlampig schreibst, wirst du in einem Monat zehnmal mehr Zeit fürs Debuggen aufwenden. Lernen wir aus den Fehlern anderer, nicht aus unseren eigenen.
\n\n2. PSR-Standards: Dein erster Schritt zur Ordnung
\n\nIn der PHP-Welt gibt es PSR (PHP Standards Recommendations) – Empfehlungen der Community. Wenn du sie nicht nutzt, machst du dir und deinen Kollegen das Leben unnötig schwer.
\n\n2.1 PSR-1 und PSR-12: Basis-Codierungsstil
\n\nPSR-1 legt allgemeine Regeln fest, PSR-12 den erweiterten Stil. Hier sind die wichtigsten Punkte:
\n\n- \n
- Dateien sollten nur
<?phpoder<?=verwenden. \n - Dateikodierung: UTF-8 ohne BOM. \n
- Klassennamen in
StudlyCaps(z. B.UserController). \n - Methoden- und Eigenschaftsnamen in
camelCase(z. B.getUserName()). \n - Einrückung: 4 Leerzeichen (keine Tabs!). \n
Beispiel für schlechten Code:
\n<?\nclass user_controller {\n\tfunction Get_User_Name($id) {\n\t\t$name = Db::query("SELECT name FROM users WHERE id=$id");\n\t\treturn $name;\n\t}\n}\n\n\nBeispiel für guten Code (PSR-12):
\n<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Controllers;\n\nuse App\\Models\\User;\n\nclass UserController\n{\n public function getUserName(int $id): ?string\n {\n $user = User::find($id);\n return $user ? $user->getName() : null;\n }\n}\n\n\nSiehst du den Unterschied? Die zweite Variante liest sich wie ein Buch: Auf einen Blick ist klar, was die Methode macht, welche Datentypen sie erwartet und zurückgibt.
\n\n2.2 PSR-4: Autoloading von Klassen
\n\nVergiss require_once in jeder Datei. Nutze Composer und PSR-4. So werden Klassen automatisch über Namespaces geladen. Die Ordnerstruktur sollte den Namespaces entsprechen:
src/\n App/\n Controllers/\n UserController.php\n Models/\n User.php\n Services/\n PaymentService.php\n\n\nIn der composer.json wird das mit einer Zeile konfiguriert:
{\n "autoload": {\n "psr-4": {\n "App\\\\": "src/"\n }\n }\n}\n\n\n3. Richtige Namensgebung: Wie du deine Variable nicht $a nennst
\n\nDie Namensgebung macht 50 % des Erfolgs aus. Ein schlechter Variablenname kann selbst ein Genie verwirren. Schauen wir uns häufige Fehler an.
\n\n