diff --git a/Coding-Guidelines.-.md b/Coding-Guidelines.-.md index c3043ba..88dd0bb 100644 --- a/Coding-Guidelines.-.md +++ b/Coding-Guidelines.-.md @@ -1,338 +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. - ---- +# 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. + +---