techphp2021

Wat is er nieuw in PHP 8.1

Nov 23, 2021

Wat is er nieuw in PHP 8.1

Op 25 november 2021 zal PHP 8.1 algemeen beschikbaar gemaakt worden. In dit artikel een kort overzicht van de wijzigingen die relevant zijn voor web development. Open de links voor meer uitgebreide informatie.


Fibers

Fibers zijn een soort van "minithreads" die meer controle geven over het verloop van het hoofdproces. Dit maakt het bijvoorbeeld mogelijk om het hoofdproces door te laten gaan zodra een fiber aangeeft dat deze moet wachten op een trage I/O-operatie, ter verbetering van algemene prestaties. Let op dat fibers niet tegelijkertijd met het hoofdproces uitgevoerd worden, maar slechts meer flexibiliteit bieden om code alternerend uit te voeren.


Enums

Enumeraties zijn een datatype bestaand uit een beperkte lijst van mogelijkheden (bijvoorbeeld een type Seizoen met alleen de waarden Lente, Zomer, Herfst en Winter). Van elke waarde is slechts één instantie beschikbaar. Enums kunnen interfaces implementeren, statische functies declareren en constanten definiëren. Enums kunnen vaak voorkomende lijsten van gerelateerde constanten vervangen in één overzichtelijk datatype.


Intersectie types

In PHP 8.0 werden "unie types" geïntroduceert die het mogelijk maakten om verschillende types te accepteren op dezelfde plaats. PHP 8.1 komt nu met "intersectie types", waarmee aangegeven kan worden dat een waarde aan meerdere types tegelijkertijd moet voldoen. Een functieargument van het type Countable&Iterator moet dus nu zowel de Countable als Iterator interface implementeren. Unies en intersecties kunnen niet gecombineerd worden. Ook null is niet toegestaan bij intersecties.


Keywords

De volgende keywords zijn óf nieuw óf worden nu op nieuwe plaatsen toegestaan:

  • never, een nieuw return-type die aangeeft dat een functie de uitvoer van het programma volledig stopt. In de praktijk niet erg nuttig, maar is vooral bedoeld voor statische analyse van code. Oorspronkelijk werd het keyword noreturn voorgesteld.
  • readonly kan nu gebruikt worden bij klasse-eigenschappen om aan te geven dat er slechts één keer een waarde aan toegekend mag worden.
  • final mag nu gebruikt worden in combinatie met const.
  • new mag nu gebruikt worden bij standaardwaarden in functieargumenten.


Uitpakken van arrays

Het uitpakken ("unpacking") van een bestaande array terwijl je een nieuwe array initialiseert was al mogelijk, maar is nu ook toegestaan voor niet-numerieke keys. Effectief is dit een mooiere notatie voor de functie array_merge.


Conversie naar Closure

Elke callable is nu via een nieuwe syntax te converteren naar een Closure. Uiteindelijk is het een kortere notatie voor Closure::fromCallable.


xxHash

Een nieuwe en zeer goed presterende hashfunctie speciaal ontworpen voor niet-cryptografische doeleinden. Toegankelijk via de hash functie in PHP. Er zijn vier varianten beschikbaar (xxh32, xxh64, xxh3 en xxh128), waarvan xxh3 de snelste is (van alle in PHP beschikbare hashfuncties). Te gebruiken als alternatief voor SHA/MD5/CRC. Niet gebruiken voor wachtwoorden (zie password_hash).


PHP 8.1 introduceert ook de zogenaamde MurmurHash3 hashfunctie.


Overige nieuwe functies

Een aantal overige opmerkelijke nieuwe functies:


Uitfaseringen

Een lijst van dingen die uitgefaseerd worden vanaf PHP 8.1 (en dus gepland zijn voor verwijdering in PHP 9):


Slotopmerkingen

Wijzigingen die minder snel van toepassing zijn op gemiddeld PHP web development zijn hier weggelaten. Verder komt PHP 8.1 nog met vele veiligheids- en prestatieverbeteringen en natuurlijk bugfixes. Bekijk de volledige lijst op de website van PHP om zeker niks te missen.