← Tilbage til versioner

PHP 8.1

Enums, readonly properties, fibers og performance forbedringer

📖 Om PHP 8.1

PHP 8.1 introducerede nogle af de mest efterspurgte features i moderne PHP udvikling. Enums gav endelig native support for enumeration types, hvilket eliminerede behovet for konstant-klasser eller third-party libraries. Readonly properties gjorde value objects og DTOs meget mere sikre ved at garantere immutability. Fibers introducerede low-level primitives for asynkron programmering, hvilket gjorde det muligt for frameworks som Amphp og ReactPHP at implementere async/await patterns uden extensions. Intersection types udvidede type systemet til at kunne kræve multiple interface implementations samtidig.

🎯 Nye Features

  • Enumerations (Enums) - Native enum support med både unit cases og backed enums
  • Readonly Properties - Immutable properties der kun kan sættes én gang i constructor
  • First-class Callable Syntax - Elegant syntax til at oprette callables med (...)
  • Fibers - Low-level building blocks for asynkron programmering uden Promises
  • Intersection Types - Kræv at en value implementerer multiple interfaces samtidig
  • Never Return Type - Indiker at en funktion aldrig returner (altid thrower eller exit)
  • Final Class Constants - Prevent child classes fra at override class constants
  • New in initializers - Brug new i parameter default values, attribute arguments og static variables
  • Pure Intersection Types - Kombiner multiple interface requirements i type hints
  • Array unpacking med string keys - Unpack associative arrays med ...
  • Octal integer literal notation - Brug 0o123 syntax i stedet for 0123

⚡ Performance Forbedringer

  • JIT compiler forbedringer giver 10-15% bedre performance i visse workloads
  • Readonly properties eliminerer defensive copying overhead
  • Fibers har minimal overhead sammenlignet med threading eller process-based async
  • ARM64 (Apple Silicon) optimeret JIT compiler for Mac brugere

⚠️ Breaking Changes

  • !Passing null til non-nullable internal function parameters er deprecated
  • !Tentative return types på internal methods - skal nu matche i child classes
  • !Serializable interface er deprecated - brug __serialize() og __unserialize() i stedet
  • !htmlspecialchars() default encoding ændret til UTF-8 på alle platforme
  • !Restrictions on $GLOBALS usage - kan ikke længere modificere $GLOBALS med indirekte writes

💡 Migration Tips

  • Refactor konstant-klasser til native enums for bedre type safety
  • Brug readonly properties i DTOs og value objects for immutability
  • Erstatt array-based enums med backed enums for database/API integration
  • Opdater Serializable implementationer til __serialize() og __unserialize()
  • Brug first-class callable syntax til at simplificere callback kode
  • Test Fibers-based libraries som Amp v3 for asynkron programmering

🔄 Upgrade Path

PHP 8.0
PHP 8.1
PHP 8.2

ℹ️ Quick Info

Release Date
25. November 2021
Status
Security fixes only
End of Life
25. November 2024