← Tilbage til versioner

PHP 8.2

Readonly classes, disjunctive normal form types og deprecations

📖 Om PHP 8.2

PHP 8.2 fokuserede på at forbedre type systemet og modernisere PHP's core functionality. Readonly classes gjorde det trivielt at skabe immutable value objects hvor alle properties automatisk er readonly. DNF types tillod endelig at kombinere union og intersection types i komplekse type declarations. Den nye Random extension erstattede de gamle mt_rand() funktioner med et moderne, objektorienteret API med bedre security og testability. Deprecation af dynamic properties var et vigtigt skridt mod mere streng type safety i PHP 9, selvom det krævede tilpasning i noget legacy kode.

🎯 Nye Features

  • Readonly Classes - Hele classes kan være readonly, alle properties bliver automatisk readonly
  • Disjunctive Normal Form (DNF) Types - Kombiner union og intersection types: (A&B)|(C&D)
  • Allow null and false as standalone types - Brug null og false som fulde type declarations
  • New Random Extension - Moderne, objektorienteret API til random number generation
  • Constants in Traits - Definer constants direkte i traits
  • Deprecate dynamic properties - Dynamic properties er nu deprecated, forbered til PHP 9
  • Standalone types null and false - Bedre type precision med null og false types
  • Fetch enum properties in const expressions - Brug enum properties i constant expressions
  • Redact sensitive parameters - #[SensitiveParameter] attribute til at skjule værdier i stack traces

⚡ Performance Forbedringer

  • Readonly classes har mindre memory overhead end almindelige classes
  • Random extension er 20-30% hurtigere end gamle mt_rand() implementering
  • DNF types er optimeret til minimal runtime overhead
  • Fjernelse af deprecated features reducerer interpreter complexity

⚠️ Breaking Changes

  • !Dynamic properties er deprecated - tilføj #[AllowDynamicProperties] eller definer properties eksplicit
  • !${"var"} string interpolation syntax er deprecated - brug {$var} eller konkatenering
  • !utf8_encode() og utf8_decode() er deprecated - brug mb_convert_encoding() i stedet
  • !FILTER_SANITIZE_STRING filter er deprecated - brug htmlspecialchars() i stedet
  • !Partial DateTime::createFromImmutable() implementation fjernet

💡 Migration Tips

  • Konverter DTOs og value objects til readonly classes for mindre boilerplate
  • Tilføj #[AllowDynamicProperties] til legacy classes der bruger dynamic properties
  • Migrer mt_rand() kode til den nye Random extension for bedre testability
  • Ret ${"var"} syntax til {$var} eller konkatenering i strings
  • Brug DNF types til komplekse type requirements som (Stringable&Countable)|array
  • Tilføj #[SensitiveParameter] til password og token parametre i dine funktioner

🔄 Upgrade Path

PHP 8.1
PHP 8.2
PHP 8.3

ℹ️ Quick Info

Release Date
8. December 2022
Status
Active support
End of Life
8. December 2025