Zes opmerkelijke features in PHP 8

Gepubliceerd: 19 juni 2020

Alex Lisenkov

Developer

Een nieuw versie betekent nieuwe features. In PHP 8 zijn er al redelijk wat nieuwe features geïmplementeerd: union types, een nieuwe mixed type constructor properties, twee nieuwe functies, de JIT compiler, attributes en nog veel meer. In deze blog benoem ik zes features die je echt moet kennen.

1. str_starts_with en str_ends_with

Twee nieuwe functies zijn toegevoegd aan PHP 8: str_starts_with en str_ends_with:

PHP

1str_starts_with ( string $haystack , string $needle ) : bool
2str_ends_with ( string $haystack , string $needle ) : bool

De str_starts_with controleert of $haystack begint met $needle en is hoofdletter gevoelig. Voor str_ends_with geldt hetzelfde maar omgekeerd.

2. Trailing komma's

In PHP 7 zagen we al trailing komma’s in arrays en method calls. In PHP 8 zijn trailing comma ook toegestaan in parameters.

PHP

1class Uri {
2    private function __construct(
3        ?string $scheme,
4        ?string $user,
5        ?string $pass,
6        ?string $host,
7        ?int $port,
8        string $path,
9        ?string $query,
10        ?string $fragment, // <-- Dikke prima!
11    ) {
12        ...
13    }
14}

Trailing komma's zullen nu toegestaan zijn voor functions, methods en closures.

3. Union Types

In PHP kunnen we return types en parameter types definiëren en sinds PHP 7.4 kunnen we ook de types van class properties definiëren. Deze types kunnen altijd maar één type zijn en hoogstens nullable. In PHP 8 kunnen we union types definiëren en dat ziet er zo uit:

PHP

1class Number {
2    private int|float $number;
3 
4    public function setNumber(int|float $number): void {
5        $this->number = $number;
6    }
7 
8    public function getNumber(): int|float {
9        return $this->number;
10    }
11}

Void kan nooit een onderdeel zijn van een union type. Nullable types combineren met union types kan niet. Als je type nullable is voeg dan null als type toe: T1|T2|null.

4. Constructor properties

Als je in PHP een class maakt met constructor properties moet je die vier keer herhalen. Properties declareren, constructor parameters, parameters aan properties toewijzen en daar bovenop declareer je het type ook tweemaal. In PHP 8 kan je alles definiëren op deze manier:

PHP

1class Point {
2    public function __construct(
3        public float $x = 0.0,
4        public float $y = 0.0,
5        public float $z = 0.0,
6    ) {}
7}

Dit staat gelijk aan:

PHP

1class Point {
2    public float $x;
3    public float $y;
4    public float $z;
5 
6    public function __construct(
7        float $x = 0.0,
8        float $y = 0.0,
9        float $z = 0.0,
10    ) {
11        $this->x = $x;
12        $this->y = $y;
13        $this->z = $z;
14    }
15}

5. Throw expressions

In PHP 8 zijn exceptions veranderd van statements naar expressions, dit maakt het mogelijk om excepties te gebruiken in bijvoorbeeld arrow functions en ternaries.

PHP

1// This was previously not possible since arrow functions only accept a single expression while throw was a statement.
2$callable = fn() => throw new Exception();
3 
4// $value is non-nullable.
5$value = $nullableValue ?? throw new InvalidArgumentException();
6 
7// $value is truthy.
8$value = $falsableValue ?: throw new InvalidArgumentException();
9 
10// $value is only set if the array is not empty.
11$value = !empty($array)
12    ? reset($array)
13    : throw new InvalidArgumentException();

6. JIT compiler

PHP 8 brengt ook de nieuwe JIT compiler met zich mee. JIT staat voor “just in time”. JIT zorgt er voor dat veelgebruikte stukken code wordt gecompileerd naar geoptimaliseerde machine code. Deze machine code wordt dan gebruikt in plaats van de echte code. Volgens de contributors van PHP zijn er een aantal redenen om voor JIT te gaan:

  • JIT is een van de laatste optimalisaties die PHP kan gebruiken.
  • PHP zou een oplossing kunnen zijn voor problemen die CPU intensief zijn en voor niet-web gerelateerde oplossingen.
  • Er kan gewerkt worden aan ingebouwde PHP-funties, in plaats van C, zonder extra performance problemen. Wat zou kunnen resulteren in snellere innovaties.

Om meer te weten te komen over PHP 8 en alle nieuwe features te zien, kijk dan even hier: https://wiki.php.net/rfc#php_80.

Opmerkingen

Er zijn momenteel nog geen opmerkingen geplaatst onder deze blog.
Wil jij als eerste een bericht achter laten?

Laat een bericht achter
Aantal tekens:0 / 500

Beveiligd met reCAPTCHA.PrivacyVoorwaarden