PHP 8 is beschikbaar!

Datum:

PHP 8.0 is hier! De nieuwste revisie is een belangrijke update van de taal en daarom heeft TransIP deze beschikbaar gesteld voor onze webhostingklanten. Aangezien PHP de basis vormt van WordPress, Magento, en andere CMS'en besloten we dat het de moeite waard zou zijn om een snelle blik te werpen op de meest significante veranderingen in de nieuwste versie van PHP.

De update betekent meer consistentie, efficiëntie en transparantie. Kortom, ontwikkelaars gaan het veel makkelijker krijgen om snellere en veiligere websites en apps te bouwen, door middel van een verscheidenheid aan wijzigingen in API's, bugfixes, en taalverbeteringen. Hier volgt een greep uit de belangrijkste veranderingen die je kunt verwachten.

Constructor property promotion

Het definiëren van eigenschappen is nu eenvoudiger met de constructor property promotion. Hiermee kunnen Class Fields, Constructor Definitions en variabelentoewijzingen gecombineerd worden in één syntax, in de constructparameterlijst. Met andere woorden, je kunt alle klasse-eigenschappen en variabeletoewijzingen weglaten en de Constructor Parameters prefixen met Public, Protected of Private. Daarna zal PHP dit zelf omzetten naar een standaard syntax voordat de code wordt uitgevoerd. Hoewel het geen update-definiërende functie is, bespaart het developers een hoop tijd en moeizame herhaling.

Voorbeeldsnippet:


class Point {

  public function __construct(

    public float $x = 0.0,

    public float $y = 0.0,

    public float $z = 0.0,

  ) {}

}

Named arguments

De namedarguments-functie maakt het mogelijk argumenten aan een functie toe te wijzen op basis van de parameternaam, zoals callAFunction(paramName: $value); De waarde heeft de parameternaam als voorvoegsel. De code is nu zelf-documenterend en -beschrijvend.  Dit komt bijzonder goed van pas wanneer functies een groter aantal parameters hebben, of meerdere standaardparameters. Bijkomend voordeel is dat de volgorde van parameters agnostisch wordt, waardoor standaardwaarden kunnen worden overgeslagen.

Voorbeeldsnippet:


htmlspecialchars($string, double_encode: false);

Null-safe operator

De Null-safe operator is een nieuwe syntax in PHP 8.0, die PHP een "chaining"-functie geeft. Dit betekent dat je de waarden van property en method return value chaining kunt lezen. De null-safe operator sluit de retrieval af als de retrieval waarde null is zonder fouten te genereren. Deze wordt van links naar rechts geëvalueerd en geeft geen voorrang aan andere functie-aanroepen. Dit is een nieuwe syntax en kan niet worden overgezet naar oudere versies van PHP.

Voorbeeldsnippet:


$country = $session?->user?->getAddress()?->country;


Union Types

Union types worden nu ondersteund in PHP 8.0. Union types laten developers meerdere waardetypes aan één variabele koppelen. Vóór deze update moesten ontwikkelaars die meerdere waardetypes wensten te gebruiken, dit specificeren in PHPDoc annotaties. Verder is er het nieuwe mixed type, een categorisering die stelt dat alle parameters en eigenschappen alle mogelijke waardetypes kunnen hebben. Ook deze functie kan worden gebruikt naast union types.

Voorbeeldsnippet:


class Number {

  public function __construct(

    private int|float $number

  ) {}

}

new Number('NaN'); // TypeError

Attributes

Nog een voordeel voor de leesbaarheid en het gebruiksgemak is een nieuwe versie van Attributes. Het grote verschil is dat terwijl eerdere versies van PHP enkel geannoteerde declaraties van klassen en eigenschappen mogelijk maakten, via PHPDoc, kan dat nu met gestructureerde metadata. Dit kan worden gebruikt met PHP-nativesyntax. 

Voorbeeldsnippet:


class PostsController

{

    #[Route("/api/posts/{id}", methods: ["GET"])]

    public function get($id) { /* ... */ }

}

Match expression

Een nieuwe, kortere syntax is altijd prettig. Match expression ondersteunt expressies van één regel en staat je toe om meerdere elementen te specificeren. Deze worden met een komma gescheiden in plaats van door een andere ‘break. Een match expression heeft een onderwerpexpressie die wordt vergeleken met meerdere alternatieven. Dit is vergelijkbaar met een switchexpressie, behalve dat de vergelijking een identiteitscontrole is in plaats van een zwakke gelijkheidscontrole.

Voorbeeldsnippet:


echo match (8.0) {

  '8.0' => "Oh no!",

  8.0 => "This is what I expected",

};

//> This is what I expected

Wat hier opgesomd is, is zeker niet alles. Zo heeft de nieuwe PHP-versie verbeterde typesysteembenaderingen en foutafhandeling, een nieuwe Just-In-Time-compiler en een scala aan functies en syntaxverbeteringen. PHP 8.0 lijkt een hoop tijd en moeite te besparen. Hoewel het nog in de kinderschoenen staat, hebben wij wel alvast gezorgd voor ondersteuning bij TransIP. Het kan de moeite waard zijn om het eens te proberen. Maar let op: overschakelen naar PHP 8.0 kan er wel voor zorgen dat WordPress plugins en thema's niet of niet goed meer werken. We raden daarom dan ook aan om dit mee te nemen in je overweging en pas over te stappen als PHP 8.0 de nieuwe standaard is, of wordt ondersteund door je plugins en thema's.

Meteen aan de slag? Zie ons knowledge base artikel voor het wijzigen van je PHP-versie!

Deel dit artikel