Nasza strona używa cookies. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Rewolucyjne funkcje w nadchodzącym PHP 8

Filip Nowacki Senior Software Developer / Blue Services Sp. z o.o.
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 zmiennej dla niego. 

<?php

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



Oryginał tekstu w języku angielskim przeczytasz tutaj

Rozpocznij dyskusję

Lubisz dzielić się wiedzą i chcesz zostać autorem?

Podziel się wiedzą z 160 tysiącami naszych czytelników

Dowiedz się więcej