Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door Floris Luiten

Tnet Devver

PHP 8 is op komst

JIT, stable sorting en meer vernieuwingen

Veranderingen onder de motorkap

Negatieve sleutelwaarden uitbreiden

Het is in PHP mogelijk om een array uit te breiden met een nieuw element, waarbij de sleutelwaarde ‘doortelt’ aan de hand van de hoogste sleutelwaarde. Dit doortellen werkt alleen als de sleutelwaarde 0 of groter is. Is er geen sleutelwaarde van 0 of groter, dan begint het doortellen bij 0.

<?php
$d[-2] = true;
$d[] = true;
$d[] = true;

In PHP 7.4 en lager geeft dit een array met de sleutelwaarden -2, 0 en 1. In PHP 8 is de restrictie vervallen dat een sleutelwaarde 0 of groter moet zijn. Dit houdt in dat in PHP 8 de sleutelwaardes -2, -1 en 0 zijn.

Nog meer veranderingen

PHP heeft de afgelopen releases vaker wijzigingen doorgevoerd die de ontwikkelaar in staat stellen de taal strikter te gebruiken. De declare(strict_types) van versie 7 is daar een recent voorbeeld van. Ook de standard PHP library, of SPL, lijkt strikter te worden, of in ieder geval consistenter, door vanaf PHP 8 vaker een error te geven. Nikita Popov, een van de coredevelopers, heeft hiervoor een RFC ingediend en deze ook zelf gebouwd. Hierdoor zullen meer functies die een argument van het verkeerde type ontvangen, geen waarschuwing geven, maar een TypeError geven, zoals nu ook gebeurt in userlandfuncties met type hinting.

Een andere technische wijziging in PHP 8 is de zogenaamde stable sorting. Voor PHP 8 was de positie van elementen met dezelfde waarde in een array na sortering niet gegarandeerd. Het kan dus betekenen dat die elementen na sortering in een andere volgorde staan. PHP 8 biedt de garantie dat elementen in dezelfde volgorde staan als voor de sortering, wanneer elementen gelijk aan elkaar zijn. Dit lijkt een klein verschil, maar kan bij bepaalde code subtiele bugs veroorzaken. Deze zullen dan waarschijnlijk aan het licht komen bij de upgrade naar PHP 8.

Syntax-wijzigingen

PHP 8 heeft enkele RFC’s geaccepteerd die vooral het lezen en typen van code makkelijker maken, zonder dat dit effect heeft op de uitvoering van een script.

Verbeterde argumentdefinitie in functies en closures

Het zal in PHP 8 mogelijk zijn om een lijst van argumenten te laten eindigen met een komma in een functie-definitie en in closures, zonder dat hier een nieuw argument op volgt. Dit was al mogelijk binnen een arraydefinitie, en bij het aanroepen van functies, maar nu dit ook bij functiedefinities mogelijk is, wordt de taal consistenter. Het voordeel van het toestaan van zo’n komma is dat de diff patches simpeler zijn, en het maakt het toevoegen van nieuwe waarden eenvoudiger.

Constructor property promotion

Een andere wijziging in PHP 8 is de mogelijkheid om eenvoudiger een value object te maken dankzij constructor property promotion. Hiermee kan een ontwikkelaar op één plaats in een klasse het type met de zichtbaarheid, toekenning en een eventuele standaardwaarde definiëren van een property, in plaats van dit op drie plaatsen te moeten doen. De RFC voor deze wijziging heeft het volgende voorbeeld van code in PHP 7.4:

<?php
class Point {
	public float $x;
	public float $y;
	public float $z;
 
	public function __construct(
		float $x = 0.0,
		float $y = 0.0,
	float $z = 0.0
	) {
		$this->x = $x;
		$this->y = $y;
		$this->z = $z;
	}
}

Met constructor property promotion kan deze code in PHP 8 als volgt worden geschreven:

<?php
class Point {
	public function __construct(
		public float $x = 0.0,
		public float $y = 0.0,
		public float $z = 0.0,
	) {}
}

De code hoeft minder vaak te worden getypt, waardoor er minder kansen zijn op fouten bij het maken en refactoren van code.


Apple iPhone SE (2020) Microsoft Xbox Series X LG CX Google Pixel 4a CES 2020 Samsung Galaxy S20 4G Sony PlayStation 5 Nintendo Switch Lite

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2020 Hosting door True