diff --git a/Coding-Guidelines.-.md b/Coding-Guidelines.-.md new file mode 100644 index 0000000..c3043ba --- /dev/null +++ b/Coding-Guidelines.-.md @@ -0,0 +1,338 @@ +# PHP Coding Guidelines + +Diese Coding-Guidelines gelten für alle PHP-Projekte der Anwendungsentwickler-Klasse. +Ziel ist ein einheitlicher, gut lesbarer und wartbarer Code-Stil, damit alle im Team effizient zusammenarbeiten können. + +--- + +## 1. Allgemeine Grundsätze + +- Wir verwenden **PHP 8.x**. +- Wir schreiben möglichst **typsicheren Code** (Parameter- und Rückgabetypen). +- Lesbarkeit steht über Cleverness. +- Duplizierten Code vermeiden („Don’t Repeat Yourself“). + +--- + +## 2. Projektstruktur + +Beispielstruktur: + +```text +projektname/ +├─ public/ +├─ src/ +│ ├─ Controller/ +│ ├─ Model/ +│ ├─ View/ +│ └─ Service/ +├─ config/ +├─ templates/ +├─ vendor/ +└─ composer.json +``` + +Regeln: + +- Öffentlich zugängliche Dateien nur in `public/`. +- Alle Klassen in `src/`. +- Keine Konfigurationswerte hart im Code. + +--- + +## 3. Dateien & Encoding + +- `.php` Endung. +- UTF-8 ohne BOM. +- Datei beginnt mit ``. + +--- + +## 4. Namespaces & Autoloading + +- PSR-4 Autoloading. +- Namespace spiegelt Ordnerstruktur wider. + +Beispiel: + +```php +name; + } +} +``` + +### Konstruktor-Injection + +```php +public function __construct( + private InvoiceRepositoryInterface $repo +) {} +``` + +--- + +## 10. Fehlerbehandlung & Exceptions + +- Keine `die()`, `exit()`, `var_dump()` im Produktivcode. +- Exceptions statt Abbrüche. + +Beispiel: + +```php +throw new UserNotFoundException("User not found"); +``` + +--- + +## 11. Kommentare & PHPDoc + +- Kommentare erklären *warum*, nicht *was*. + +Schlecht: + +```php +// increment i +$i = $i + 1; +``` + +### PHPDoc + +```php +/** + * Berechnet die Gesamtsumme einer Rechnung. + */ +public function calculateTotal(Invoice $invoice): float +{ +} +``` + +--- + +## 12. Sicherheit + +### Eingaben validieren + +```php +$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); +``` + +### SQL Injection vermeiden + +```php +$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email'); +$stmt->execute(['email' => $email]); +``` + +### XSS verhindern + +```php + +``` + +### Passwörter + +```php +password_hash($pw, PASSWORD_DEFAULT); +password_verify($pw, $hash); +``` + +### CSRF-Token + +```html + +``` + +--- + +## 13. Git-Workflow + +- Häufige, kleine Commits. +- Commit-Messages im Imperativ: + - `Add login form` + - `Fix session timeout` +- Keine sensiblen Daten committen. +- `.gitignore` für: + - `vendor/` + - `.idea/` + - `.vscode/` + - `logs/` + - `cache/` + +--- + +## 14. Code-Review-Regeln + +- Review vor jedem Merge. +- Kritik ist sachlich. +- Reviewer geben konkrete Vorschläge. + +--- + +## 15. Beispiel-Code + +```php +connection->prepare($sql); + $stmt->execute(['email' => $email]); + + $data = $stmt->fetch(PDO::FETCH_ASSOC); + + if ($data === false) { + return null; + } + + return new User( + (int) $data['id'], + (string) $data['name'], + (string) $data['email'] + ); + } +} +``` + +--- + +## 16. Weiterentwicklung + +- Guidelines sind lebendig. +- Änderungen im Team besprechen. +- Aktualisierungen per Pull-Request. + +---