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.
9.07.20202 min

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
<?php
final class Foo implements \Stringable
{
public function __toString(): string
{
return 'bar';
}
}
Kompilator just-in-time
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
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.