Sytuacja kobiet w IT w 2024 roku
9.07.20202 min
Filip Nowacki

Filip NowackiSenior Software DeveloperBlue Services Sp. z o.o.

Rewolucyjne funkcje w nadchodzącym PHP 8

Poznaj kilka świetnych funkcji, takich jak interfejs stringable oraz kompilator JIT, które pojawią się w nadchodzącym PHP 8.

Rewolucyjne funkcje w nadchodzącym PHP 8

Czy Wy też uważacie, że JIT w to najbardziej oczekiwana funkcja PHP 8? W tym artykule przyjrzymy się też innym rewolucjom w nadchodzącym wydaniu. Osobiście nie mogę się doczekać 26 listopada, kiedy zostanie wydana stabilna wersja major. 

Interfejs Stringable

Link to RFC

<?php

final class Foo implements \Stringable
{
    public function __toString(): string
    {
        return 'bar';
    }
}

Kompilator just-in-time

Link do RFC

Oto JIT. Zeev, jeden z czołowych developerów PHP, podzielił się wersją demo z generowaniem fraktali, aby pokazać wydajność PHP 7.0 z JIT. 

Funkcje String

<?php

str_contains('foo bar string', 'bar'); // true

str_starts_with('hello world', 'hell'); // true

str_ends_with('ski jumping', 'ing'); // true

Hint types

Unie pozwalają na type hinting dla kilku typów. Dodatkowo nowy typ mixed będzie mógł reprezentować kilka typów jednocześnie.

<?php

final class Foo 
{
    public function foo(AClass | BClass $class): string|boolean;
    
    public function bar(mixed $any): mixed;
}

Kończenie przecinkiem listy parametrów

<?php

final class Foo
{
    public function bar(
        string $a,
        string $b,
        float $c,
        bool $d,
    }
}

Atrybuty 

Link do RFC

Dla atrybutów używamy obecnie Doctrine Annotations. Tak to wygląda w PHP 8: 

<?php

use Foo\ListensTo;

final class UserSubscriber
{
    <<ListensTo(UserLoggedOut::class)>>
    public function onUserLoggedOut(UserLoggedOut $event): void { /* ... */ }
  
    <<ListensTo(UserLoggedIn::class)>>
    public function onUserLoggedIn(UserLoggedIn $event): void { /* ... */ }
}

Rzucanie wyjątków w wyrażeniach

<?php

$trigger = fn () => throw new \RuntimeException();

$foo = $bar['undefined'] ?? throw new \OutOfRangeException();

Nieprzechwytujący catch

Nie potrzebujesz czasem zmiennej wyjątku? Po prostu nie definiuj dla niego zmiennej. 

<?php

try {
  // oops, exception throws here
} catch (\Exception) {
  // log exception error
}



Oryginał tekstu w języku angielskim przeczytasz tutaj

<p>Loading...</p>