PHP 8.1 release is hier

Bobby Bouwmann
Bobby Bouwmann

4 januari 2022

PHP 8.1 | credit: Ben Griffiths

Het is alweer 2022 en dat betekent dat PHP 8.1 is uitgebracht. Het zit vol met nieuwe functies, snelheidsverbeteringen en meer. Laten we snel kijken wat dat ons brengt.

Enums

Laten we eerst beginnen met mijn persoonlijke meest gewenste en tevens meest gewilde functie. Enums! Met enums kunnen we veel code opschonen in de meeste PHP-applicaties. Enums kunnen worden gebruikt om een kleine reeks mogelijke waarden te abstraheren. Bijvoorbeeld de status van een bestelling. Het kan ofwel “voltooid”, “geannuleerd” of “in uitvoering” zijn. Met een enum kunnen we ervoor zorgen dat de waarde altijd een van de drie is.

PHP 8.1 ondersteunt twee soorten enums. Pure enums en backedenums. Pure enums zijn enums met alleen een vaste waarde. Backed enums hebben een key value constructie. Het is belangrijk om te weten dat je de twee soorten niet kunt mengen. Ook moeten alle type waardes in een enums hetzelfde zijn, je kunt ze dus niet door elkaar halen.

Pure enums
Backed enums

Pure interception types

PHP ondersteunt al union-types. Dit betekent in feite dat een bepaalde parameter moet overeenkomen met een van de opgegeven types. We kunnen het pipe-teken gebruiken om een union-type voor een functie te definiëren. Met deze nieuwe release is het nu mogelijk om een parameter te hebben waarbij de gegeven parameter moet overeenkomen met alle opgegeven types. We kunnen het ampersand-teken gebruiken om dat te definiëren.

Dit is vooral handig als je met veel interfaces werkt en er zeker van wilt zijn dat een bepaalde parameter beide interfaces gebruikt. Op deze manier weet je precies welke methoden ja kan aanroepen.

Pure interception types

Readonly properties

De naam zegt het al! Eigenschappen die alleen kunnen worden gelezen. Het is echt een goede toevoeging voor PHP om objecten met vaste waardes op te bouwen die je kunt doorgeven. Wanneer een object is geconstrueerd, verandert het niet meer. Dit geeft een zekere mate van zekerheid en rust bij het schrijven van code. Hiermee kunnen we ervoor zorgen dat objecten eigenlijk nooit veranderen.

Readonly properties

Never return type

Een cool nieuw return type date is toegevoegd, is het type “never”. Dit betekent in feite dat een functie niets terug geeft. Het type “never” is handig wanneer een functie een exceptie gooit of wanneer bijvoorbeeld “exit” binnen een functie wordt aangeroepen. Libraries zoals TypeScript hebben ook deze return type.

Houd er rekening mee dat dit iets anders is dan “void”. Met “void” loopt de flow van de applicatie nog steeds door, het geeft gewoon niks geen waarde terug. Met “never” stops de uitvoering totdat deze ergens wordt afgevangen of als het het einde van de applicatie is.

Statische analyse tools die ons helpen om bugs in onze code en onjuiste return types te vinden, houden echt van dit nieuwe return type. Zonder de code uit te voeren kunnen we al zien of het juiste type wordt teruggeven of met het “never” return type dat er niets is teruggegeven.

Performance boost

PHP 8.1 wordt ook geleverd met een hele mooie performance boost. Dit komt vooral door een functie genaamd “inheritance cache”. Dit maakt het mogelijk om de koppeling tussen classes te cachen, waardoor het sneller is om dezelfde classes meerdere keren aan te roepen. Hoewel we niet veel van deze functies zien als we aan onze PHP-applicatie werken, is het toch goed om te zien dat er verbeteringen worden aangebracht in alle PHP-updates.

Hieronder zie je een overzicht van de nieuwe snelheidsvergelijking. Deze resultaten zijn gebaseerd op een demo-app van Symfony. Hieronder zie je de gemiddelde request tijd per PHP-versie. Minder is beter in dit geval.

Er is meer

Naast alle bovenstaande functies, is PHP ook wat opgeschoond. Sommige methoden zijn niet meer beschikbaar of zijn gemarkeerd als “deprecated”. Als je al met PHP 7 of PHP 8 werkt, hoef je je hier geen zorgen om te maken. Je zult waarschijnlijk geen van deze oude methodes gebruiken.

Alle wijzigingen en voorbeelden zijn te vinden op de php.net website: https://www.php.net/releases/8.1/en.php 

Tot slot

PHP 8.1 biedt ondersteuning voor enums, wat een veelgevraagde functie was. Ook de prestaties van de taal kregen een boost wat altijd een mooi voordeel is. Het type systeem is verbeterd om functies zoals “readonly”, “intersection types” en de “never” type te ondersteunen. Tijd om nu te updaten en te genieten van alle nieuwe functies en verbeteringen.

PS. Dit artikel liever in het Engels lezen? Dat kan, we publiceerden in december het blog in het Engels. Je leest ‘m hier.