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:
- array_is_list, om te testen of een array een lijst is (dus alleen keys heeft die bestaan uit opeenvolgende getallen)
- IntlDatePatternGenerator, meer uitgebreide mogelijkheden voor het genereren van internationale datum/tijd formaten
- fsync en fdatasync (voor de volledigheid)
- Verschillende migraties van resources naar objectgeörienteerde alternatieven (deze wijzigingen breken dus oude code gebaseerd op resources): IMAP\Connection, finfo, FTP\Connection, GdFont en LDAP\Connection
- Beperkingen m.b.t. $GLOBALS gebruik (zal voor de meeste code niet uitmaken)
- Expliciete notatie voor octale cijfers (voor de volledigheid)
- Toevoegingen voor cURL (zoals DNS-over-HTTPS, ook wel DoH genoemd)
Uitfaseringen
Een lijst van dingen die uitgefaseerd worden vanaf PHP 8.1 (en dus gepland zijn voor verwijdering in PHP 9):
- date_sunrise en date_sunset
- key, current, next, prev, en reset op objecten
- get_class, get_parent_class en get_called_class zonder argumenten
- strptime, strftime en gmstrftime
- verschillende mhash functies
- mysqli::init
- odbc_result_all
- en meer
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.