Coding Standards¶
Vi følger PSR-12 som baseline for PHP-kodestil, med teamspecifikke tilføjelser beskrevet her.
PHP-version¶
Alle nye projekter og packages kræver PHP 8.2+. Brug moderne PHP-features: readonly properties, named arguments, enums, first-class callables.
Kodestil (PSR-12 + PHP-CS-Fixer)¶
Kodeformatering håndteres automatisk af PHP-CS-Fixer. Ingen manuelle diskussioner om whitespace i PR-reviews.
Kør lokalt:
Standard .php-cs-fixer.dist.php:
<?php
$finder = PhpCsFixer\Finder::create()
->in(__DIR__ . '/src')
->in(__DIR__ . '/tests');
return (new PhpCsFixer\Config())
->setRules([
'@PSR12' => true,
'@PHP82Migration' => true,
'declare_strict_types' => true,
'ordered_imports' => ['sort_algorithm' => 'alpha'],
'no_unused_imports' => true,
'trailing_comma_in_multiline' => true,
'array_syntax' => ['syntax' => 'short'],
])
->setFinder($finder);
Static Analysis (PHPStan)¶
Alle projekter kører PHPStan level 8 som minimum. Nye projekter starter på level 9.
Navnekonventioner¶
| Element | Konvention | Eksempel |
|---|---|---|
| Klasser | PascalCase | UserInvitationService |
| Interfaces | PascalCase + Interface-suffix | PaymentGatewayInterface |
| Traits | PascalCase + Trait-suffix | HasTimestampsTrait |
| Enums | PascalCase | InvoiceStatus |
| Metoder | camelCase | sendVerificationEmail() |
| Properties | camelCase | $billingAddress |
| Konstanter | UPPER_SNAKE_CASE | MAX_RETRY_ATTEMPTS |
| Filer | PascalCase (én klasse per fil) | UserInvitationService.php |
Generelle principper¶
Strict types: Alle PHP-filer starter med declare(strict_types=1);
Type declarations: Alle metoder har fuld type-annotation — parametre, return types og property types. Brug mixed kun som sidste udvej.
Dependency Injection: Injicer afhængigheder via constructor. Undgå service locators og statiske metoder til afhængigheder.
Enkelt ansvar: En klasse har ét ansvar. Er din klasse svær at navngive præcist? Den gør sandsynligvis for meget.
Immutability: Foretruk readonly properties og value objects frem for mutable state.
Hvad vi ikke gør¶
- Vi bruger ikke
var_dump()ellerdd()i commitseret kode - Vi committer ikke
composer.lock-konflikter uløste - Vi sætter ikke
@suppresspå PHPStan-fejl uden en kommentar der forklarer hvorfor - Vi bruger ikke
arraysom type-hint hvor vi kan bruge en specifik type