PHP 8.0 Just In Time met attributen en nog veel meer

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.

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.

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 OVER UNION TYPES

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 OVER ATTRIBUTES

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().

RFC VAN STR_CONTAINS()

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

ALLE FEATURES PHP 8.0

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

Lees hier onze blogs!

Breid je kennis uit met de 4BIS Blog...

En wat kunnen we voor jou betekenen?_

Wil je meer weten of heb je interesse? Neem dan gerust direct contact met ons op, per telefoon of via de mail.
Of maak gebruik van één van onze contactformulieren zodat we je zo snel en gepast mogelijk antwoord kunnen geven. We horen graag van je!

back to top