PHP 8.0 Just In Time with Attributes and much more

Nog heel even wachten en dan komt de nieuwe versie van PHP uit versie 8.0. Deze brengt een hoop leuke nieuwe functies met zich mee zoals de JIT compiler, Union Types, en attributen. Deze 3 dingen ga ik kort even bespreken zodat je een idee krijgt wat de komende versie allemaal met zich mee brengt.
updated: Feb 18, 2021 at 11:09AM | published: Nov 13, 2020

De tijd is bijna aangebroken en dan heb ik het niet over de verjaardag van Sinterklaas, nee ik heb over de release van de nieuwe versie van PHP. Op 26 november wordt PHP 8.0 gereleased. Dit een major release en zorgt ervoor dat er een aantal belangrijke wijzigingen zullen zijn, evenals veel nieuwe functionaliteiten en prestatieverbeteringen.

Omdat er een aantal belangrijke wijzigingen in zitten, kan het zijn dat je je code moet updaten om het te laten lopen op php 8.0. Maar als je je php versies up to date hebt gehouden dan moet de upgrade naar versie 8 niet al te moeilijk zijn aangezien de meeste breaking changes al verouderd zijn voor de 7.* versies. En geen zorgen, we zetten de verouderde functies even op een rijtje.

Maar voordat we bij de verouderde functies komen, gaan we het eerst hebben over alle leuke nieuwe dingen die PHP 8.0 met zich mee brengt. Zoals de union types, JIT compiler, attributen en de str_contains() Er zijn er nog meer maar dat zijn de 4 dingen die we even kort gaan bespreken.

Nieuwe Features

 Union Types

Een union type kan waardes accepteren van meerdere verschillende types in plaats van 1. In de huidige versie van PHP wordt dit niet geaccepteerd met de uitzondering van 2 speciale union types

  • Type of null, met behulp van de speciale syntaxis ?Type.
  • array of Traversable, met behulp van het speciale iterabele type.

Voor php 8.0 kon dit worden opgelost met het volgende voorbeeld door gebruik te maken van phpdoc annotations. Zie volgend voorbeeld van Nikita Popov in het RFC hieronder

Het ondersteunen van union-typen in de taal stelt ons in staat om meer type-informatie van phpdoc naar functiehandtekeningen te verplaatsen, met de gebruikelijke voordelen die dit met zich meebrengt:

  • Typen worden daadwerkelijk afgedwongen, dus fouten kunnen vroegtijdig worden opgemerkt.
  • Omdat ze worden afgedwongen, is de kans kleiner dat type-informatie verouderd raakt of edge-cases mist.
  • Typen worden gecontroleerd tijdens overerving, waardoor het Liskov-vervangingsprincipe wordt gehandhaafd.
  • Typen zijn beschikbaar via Reflection.
  • De syntaxis is veel minder standaard dan phpdoc.
Nikita Popov

In de RFC wordt aangevraagd of we union types voortaan kunnen ondersteunen in functiehandtekeningen, zodat we niet meer afhankelijk zijn van inline documentatie, maar ze kunnen specificeren met de syntax T1 | T2 … 

Meer lezen?
Meer lezen over het RFC voor Union Types! Klik hieronder

JIT Compiler

Just-In-Time (JIT) compiler is een van de features die live gezet gaat worden met php 8.0. De JIT compiler zat er al in voor test doeleinden maar hij is nu klaar om gebruikt te worden. Het zou moeten zorgen voor een significante prestatie verhoging. PHP wordt niet gecompileerd, maar regel voor regel geïnterpreteerd. JIT is een techniek die delen van de code tijdens runtime compileert, zodat in plaats daarvan de gecompileerde versie kan worden gebruikt. Zie het als een “gecachteversie” van de geïnterpreteerde code, die tijdens runtime gegenereerd wordt.

Pedro Escudero heeft JIT al getest. Hij heeft een simpel script gebruikt om verschillende versies van PHP performance te testen. Hij heeft dit script 100x gerund en de gemiddelde tijd gepakt. Hieronder zie je de benchmark resultaten:

Version Time in seconds
5.3 0.64574003219604
7.4 0.10253500938416
8.0 (without JIT) 0.098223924636841
8.0 (with JIT 0.053637981414795

Zoals je kan zien is het verschil tussen 7.4 en 8.0 zonder JIT niet heel significant. Maar met de JIT compiler word de prestatie met ongeveer 45% verbetert.

Attributes

Attributen zijn declaratieve metadata die tussen “<<” en “>>” staan. Ze kunnen aan andere delen worden toegevoegd om eigenschappen te specificeren. Een andere naam voor attributen is annotations. Dit is een term die bekend is uit Doctrine beiden worden vaak door elkaar gebruikt. PHP is specifiek voor de naam attributes gegaan om de verwarring met Doctrine zoveel mogelijk te voorkomen.

Meer lezen?
Meer lezen over het RFC van Attributes klik hieronder!

Meer lezen?
Meer lezen over het RFC van str_contains() klik hieronder!

str_contains()

str_contains is een van de nieuwe functies die een tijd op zich heeft laten wachten. Hiermee kan je kijken of een string zich in een andere string bevindt en hoef je niet langer meer gebruik te maken van str_pos().

We hebben nu een aantal van de grote features besproken maar er zijn er natuurlijk meer. Wil je weten wat er verder nog allemaal in php 8.0 kan. Klik dan hieronder

Zoals je kan lezen brengt versie 8.0 ons een hoop spannende en leuke nieuwe features die een hoop nieuwe leuke dingen kunnen brengen. Zoals gezegd het is wel een major release dus er kunnen dingen tussen zitten die je code zou kunnen breken. Maar als je je code up-to-date hebt gehouden dan moet het allemaal wel meevallen. Ik zelf kan in ieder geval niet wachten om te gaan spelen met PHP 8.0


Deel 4 van de React Hooks serie useMemo & useCallback

Deel 4 van de React Hooks serie useMemo & useCallback

Deel 4 van de ReactHooks serie! We gaan het hebben over useCallback en over useMemo. Met deze hooks kunnen we waardes of callback memoizen dit kan nuttig zijn bij zware operaties of om te zorgen dat bepaalde componenten niet altijd mee rerenderen. Zeker omdat bij kleine applicatie het vaak efficienter is om niet te optimaliseren dan wel.

Lees meer
Redux de Intro!

Redux de Intro!

Deze week een korte introductie van de 4 basisbegrippen die je nodig hebt om Redux te begrijpen. We gaan kort uitleggen hoe state wordt aangepast in een Redux Store met behulp van Reducers en Actions. En we vertellen wat al deze begrippen doen en hoe ze werken in een Redux applicatie.

Lees meer

Software ontwikkeling op maat

Hoe werkt het?

Wat wonderen doet voor het ene bedrijf kan zinloos zijn voor een ander bedrijf. Daarom hebben we oplossingen op maat die het unieke karakter van jouw bedrijf respecteren. We werken in een positieve spiraal van testen, monitoren en verzamelen gegevens om precies te weten te komen wat voor jou werkt en wat niet. Het is onze ‘whole package’-mindset, een aandacht voor details die ons in staat stelt om elke keer jouw prestatiedoelstellingen te bereiken. Dus ontspan en geniet van de rit!