Få ny viden om PHP versionerne 8.3 til 8.5. Vi har samlet et overblik til dig så du kan se hvilke hovedtræk der er gennem de sidste 3 versioner og hvad du skal kigge på i forhold til om din løsning kan håndterer disse versioner. Du kan altid se dokumentationen for PHP versioner på https://www.php.net/ChangeLog-8.php. Husk at opdatere din hjemmeside inden en eventuel ændring i PHP version.
PHP 8.3
PHP 8.3 blev udgivet den 23. november 2023 og er en solid opdatering med fokus på typesikkerhed og nye praktiske funktioner.
De vigtigste ændringer:
- Typede klassekonstanter: Du kan nu angive typer for konstanter i klasser, interfaces og traits. Dette sikrer typekonsistens når underklasser arver fra basisklasser og forhindrer utilsigtede typeændringer.
- Dybdekloning af readonly-egenskaber: Readonly-egenskaber kan nu geninitialiseres inden for __clone() metoden, hvilket muliggør dybdekloning – en efterspurgt forbedring blandt udviklere.
- json_validate() funktion: En ny funktion der validerer om en streng er gyldig JSON uden at bruge json_decode(). Dette er mere effektivt og bruger mindre hukommelse.
- #[\Override] attribut: En ny attribut der verificerer, at en metode faktisk overskriver en forældre-metode. Dette beskytter mod tastefejl og problemer ved refaktorering.
- Dynamisk adgang til klassekonstanter: Du kan nu tilgå klassekonstanter og enum-medlemmer med variable navne direkte via MyClass::{$konstantNavn}.
- Detektering af stakoverløb: Nye INI-indstillinger gør det muligt at opdage stakoverløb og kaste en fejl i stedet for at crashe, hvilket gør fejlfinding langt nemmere.
- Forbedret Randomizer-klasse: Nye metoder som getBytesFromString(), nextFloat() og getFloat() til bedre tilfældighedsgenerering.
- Bedre dato/tid-undtagelser: Mere præcise og dedikerede undtagelser for dato- og tidsoperationer.
PHP 8.4
PHP 8.4 blev udgivet den 21. november 2024 og er den hidtil mest funktionsrige opdatering i PHP 8.x-serien.
De vigtigste ændringer:
- Property hooks: En af de mest markante ændringer i moderne PHP. Du kan nu definere get- og set-logik direkte på egenskaber, hvilket eliminerer behovet for omfattende kode med getters og setters.
- Asymmetrisk synlighed: Du kan nu definere forskellige synlighedsniveauer for læsning og skrivning af en egenskab. For eksempel kan en egenskab være offentligt læsbar, men kun modificerbar internt i klassen.
- HTML5 DOM-understøttelse: DOM-parseren understøtter nu fuldt ud HTML5 via nye DOM-klasser. Dette er en kæmpe forbedring for alle der arbejder med HTML-parsing.
- Nye array-funktioner: Praktiske funktioner som array_find(), array_find_key(), array_any() og array_all() gør det nemmere at søge og validere arrays.
- Metodekæder uden parenteser: Du behøver ikke længere parenteser når du instantierer objekter og kalder metoder. (new MinKlasse())->metode() kan nu skrives som new MinKlasse()->metode().
- Dovne objekter (Lazy Objects): Native understøttelse af dovne objekter, et mønster der bruges af frameworks til at bygge proxy-objekter.
- #[\Deprecated] attribut: En ny indbygget attribut til at markere funktioner, metoder og klasser som forældede.
- Forbedret BCrypt-sikkerhed: Standard-omkostningen for bcrypt er øget til 12, hvilket styrker adgangskodehashing mod brute-force angreb.
- Nye BCMath-funktioner: bcfloor(), bcceil(), bcround() og bcdivmod() samt objektorienteret API med BcMath\Number klassen.
- PDO underklasser: Driver-specifikke PDO-underklasser som Pdo\MySql, Pdo\Pgsql og Pdo\Sqlite for bedre typesikkerhed.
PHP 8.5 (kommer november 2025)
PHP 8.5 er under udvikling og forventes udgivet i november 2025. Her er et smugkig på hvad der er på vej.
De vigtigste ændringer:
- Pipe-operatoren (|>): En ny operator der gør det muligt at kæde funktionskald sammen på en mere læsbar måde. I stedet for indlejrede funktionskald kan du nu skrive data fra venstre mod højre.
- #[\NoDiscard] attribut: Angiver at en funktions returværdi er vigtig og bør bruges. Dette hjælper med at fange fejl hvor returværdier ignoreres ved et uheld.
- Lukninger i konstante udtryk: Du kan nu bruge closures og førsteklasses callables i konstante udtryk, hvilket giver større fleksibilitet.
- Klon med ændringer: clone() funktionen understøtter nu at ændre egenskaber under kloning.
- URL-parsing efter RFC 3986 og WHATWG: Nye API’er til URL-parsing og manipulation der følger moderne standarder.
- Ny URI-udvidelse: En helt ny udvidelse til at arbejde med URI’er på en standardiseret måde.
- Nye array-funktioner: array_first() og array_last() til nemt at hente første og sidste element i et array.
- HEIF/HEIC billedunderstøttelse: getimagesize() understøtter nu HEIF- og HEIC-billedformater.
- SVG-understøttelse: getimagesize() og relaterede funktioner understøtter nu SVG-billeder.
- Partitionerede cookies: Understøttelse af partitionerede cookies i både sessions og standard cookie-funktioner.
- Grafem-funktioner med lokalitet: Funktioner som grapheme_strpos() og grapheme_substr() får nu en $locale parameter.
- OPcache er nu obligatorisk: OPcache er ikke længere valgfrit og bygges altid med.
Forældede funktioner i PHP 8.5:
- curl_close() og curl_share_close() er forældet
- exit/die opfører sig nu mere som en funktion
- Brug af null som array-indeks er forældet
- $http_response_header variablen er forældet (brug http_get_last_response_headers() i stedet)
- Backtick-operatoren som alias for shell_exec() er forældet
Supportperioder
- PHP 8.3: Fejlrettelser til udgangen af 2025, sikkerhedsopdateringer til udgangen af 2027
- PHP 8.4: Fejlrettelser til udgangen af 2026, sikkerhedsopdateringer til udgangen af 2028
- PHP 8.5: Fejlrettelser til udgangen af 2027, sikkerhedsopdateringer til udgangen af 2029 (forventet)
Overordnet så vil disse PHP versioner forbedre både ydeevne, renere kode og øget sikkerhed.
