Wat is er nieuw in PHP 8?

Richard | 10 november 2020

PHP 8 komt uit op 26 november 2020. Het is een nieuwe zogeheten “major version”, wat kan betekenen dat de huidige code niet meer werkt zoals die dat eerder deed. Ook komen er een hoop toevoegingen en worden er snelheidsverbeteringen toegepast.

Een greep uit de toevoegingen

Gezien de grootte van de upgrade is het niet haalbaar om alles te benoemen. Daarom heb ik er voor gekozen die wijzigingen er uit te pikken die er voor mij het meeste uit springen.

Union types

Ondanks dat PHP van nature niet strikt is, kan het heel handig zijn om in bepaalde situaties aan te geven dat je alleen een specifiek type verwacht. Waar dit al een tijd mogelijk is, is het vanaf PHP 8 ook mogelijk om meerdere types te definiëren.

Een return type zoals “void” mag hiervoor niet gebruikt worden. Met “void” geef je aan dat er geen return is, dit valt dus niet te rijmen wanneer je soms toch een return hebt.

JIT

JIT staat voor “Just In Time”. JIT is een compiler die enorme snelheidsverbeteringen lijkt te bieden.

PHP is van nature een taal die geïnterpreteerd wordt. Wat zoveel betekent dat de code die wij schrijven pas omgezet wordt (in code die begrepen wordt door o.a. de CPU) tijdens het uitvoeren. Terwijl dit bij een taal die gecompileerd wordt van tevoren wordt gedaan.

De JIT compiler werkt via een combinatie van interpreteren en compilen. JIT compileert code die vaak wordt gebruikt tijdens het uitvoeren en gebruikt dit wanneer dezelfde code vervolgens opnieuw wordt uitgevoerd. Dit maakt het geheel sneller, aangezien deze handeling nu minder vaak uitgevoerd hoeft te worden.

Nullsafe operator

De null coalescing operator bestaat al vanaf PHP 7. Deze werkt alleen niet met functies. Dit betekent dat je alsnog een check moet uitvoeren of een variabele wel bestaat na het aanroepen van een functie, voordat je er verder mee kunt werken.

Met de “nullsafe operator” is dit niet langer nodig. Door het toevoegen van een vraagteken kun je aangeven dat het resultaat van de functie ook “null” kan zijn en dit wordt dan ook teruggegeven.

Named arguments

Bij het aanroepen van een functie is het verplicht om de juiste volgorde van de parameters aan te houden. Enkel optionele parameters met een standaardwaarde mogen weggelaten worden mits er geen parameters worden overgeslagen.

Vanaf PHP 8 is dit niet langer noodzakelijk. Door middel van zogeheten “named arguments” kun je bij de aanroep de naam van het argument meegeven. Hierdoor is het mogelijk om de volgorde aan te passen alsmede optionele parameters weg te laten.

Kanttekening bij deze toevoeging is wel dat wanneer je data koppelt aan deze “named arguments” en dit wordt, bijvoorbeeld door een beheerder aangepast, jouw code niet meer werkt.

Attributes

“Attributes”, in andere programmeertalen ook wel “annotations” genoemd, geven de mogelijkheid om metadata aan een klasse, functie of variabele mee te geven. Eerder kon dit alleen via docblocks. De tekortkoming daarvan is echter dat dit door een applicatie zelf moet worden uitgelezen. Doordat PHP nu officieel “attributes” aanbiedt kan dit door de zogeheten “tokenizer” worden gedaan.

Match expression

Iedereen die ooit met PHP (of een andere programmeertaal) heeft gewerkt kent ongetwijfeld de “switch expression”.

De nieuwe “match expression” maakt de switch in de meeste gevallen overbodig. Op enkele uitzonderingen na worden alle functionaliteiten van de “switch expression” ook geboden met de “match expression”. Daarnaast zijn er een aantal voordelen:

  • Je hebt bij elke optie niet langer een “break statement” nodig;
  • Je krijgt een waarde terug van de functie, waardoor je maar één keer de waarde hoeft mee te geven;
  • Het is een stuk korter, en daardoor ook vaak leesbaarder.
Constructor property promotion

Deze toevoeging is bedoeld om de hoeveelheid code die je nodig hebt om “properties” aan een klasse toe te voegen en een waarde te geven drastisch te verminderen.

Kan nu geschreven worden als:

New str_contains() function

Deze functie maakt het makkelijker om te zien of een woord of gedeelte van een string in een andere string zit. Eerder moesten we het doen met “strpos”.

Oude manier:

Nieuwe manier:

str_starts_with() & str_ends_with() functions

Nog twee functies die al heel lang hadden moeten bestaan.

Tot slot

Persoonlijk kijk ik enorm uit naar de livegang van PHP 8. Naast de grote veranderingen is er ook een hoop aandacht gegaan naar zaken die in eerste instantie niet heel veel toe lijken te voegen, maar juist voor programmeurs het leven iets makkelijker maakt.

even overleggen?

050 588 54 50 info@byyoursite.nl
Westerhaven 13-1 || 9718 AW Groningen

info@byyoursite.nl | 050 588 54 50