PHP 8.0 już oficjalnie! Język programowania (tak!) z wieloma dodatkami i lepszą wydajnością.
O co ten szum, tak w skrócie?
PHP 8.0 jest już dostępny tak jak oczekiwano - udostępniono aktualizację tego szeroko używanego języka programowania, który działa po stronie serwera WWW. PHP 8.0 wprowadza opcjonalny kompilator JIT, integruje istniejącą obsługę JSON z rdzeniem (już nie jest to opcjonalne) i dodaje obsługę języka dla atrybutów, typów union czy statycznego typu zwracanego.
Zmiany a stare skrypty
Ze względu na istotne zmiany wprowadzane nową wersją istnieje większe prawdopodobieństwo, że będziesz musiał dokonać pewnych zmian w swoim kodzie, aby działał w PHP 8. Jeśli jednak jesteś na bieżąco z najnowszymi wydaniami, aktualizacja nie powinna być szczególnie trudna, ponieważ większość istotnych zmian została uznana za przestarzałą jeszcze w wersjach 7.*.
Przyjrzyjmy się kilku wybranym nowościom.
Union types
Typy unii są użyteczne w wielu różnych zastosowaniach. Generalnie chodzi o to, że typ unii to kolekcja dwóch lub więcej typów i jej zastosowanie świadczy o tym, że dopuszczamy zastosowanie któregokolwiek z nich. Przykład:
public function foo(Foo|Bar $input): int|float;
Void nigdy nie może być częścią union type bo nie wskazuje na żadną konkretną wartość zwracaną. Możemy za to korzystać z tzw. nullable unions, tj. korzystając z null, na przykład:
public function foo(Foo|null $foo): void;
JIT
Kompilator JIT – just in time - obiecuje znaczną poprawę wydajności, choć nie zawsze w kontekście żądań (requestów). Pierwsze testy porównawcze dla rzeczywistych aplikacji internetowych raczej nie wskazują na niesamowity przyrost wydajności w przypadku takich projektów PHP. Czemu mamy sobie nim w ogóle zawracać głowę?
PHP jest językiem interpretowanym: nie jest kompilowany tak jak program C, Java czy Rust. Zamiast tego jest tłumaczony na kod maszynowy - coś, co procesor rozumie - w czasie wykonywania. JIT to technika, która kompiluje części kodu w czasie wykonywania, dzięki czemu można zamiast użyć skompilowanej wersji. Jest to coś w rodzaju „zbuforowanej wersji” interpretowanego kodu, generowanej w czasie wykonywania. Jak to działa?
Istnieje tak zwany „monitor”, który sprawdza kod w trakcie jego działania. Gdy ten monitor wykryje części kodu, które są ponownie wykonywane, oznaczy te części jako „ciepłe” lub „gorące”, w zależności od częstotliwości ich użycia. Te gorące części można skompilować i używać w locie zamiast prawdziwego kodu.
Sprawdź oferty pracy na TeamQuest
Operator nullsafe
Jeśli znasz operator null coalescing to wiesz też, jakie ma ograniczenia: nie działa z wywołaniami metod. Można się było do tej pory ratować rozwiązaniami dostarczanymi przez niektóre frameworki ale teraz już nie trzeba. PHP 8.0 dostarcza nullsafe operator, który możesz użyć na przykład tak:
$dateAsString = $booking->getStartDate()?->asDateTimeString();
Atrybuty
Jeśli znasz adnotacje (np. w Javie) to odpowiednikiem takich annotations w PHP będą teraz attributes. Możliwe będzie więc opatrzenie klasy taką meta-daną, na przykład w ten sposób:
use App\Attributes\ExampleAttribute;
#[ExampleAttribute]
class Foo
{
#[ExampleAttribute]
public const FOO = 'foo';
#[ExampleAttribute]
public $x;
#[ExampleAttribute]
public function foo(#[ExampleAttribute] $bar) { }
}
Polecamy też to proste porównanie nowych funkcji na stronie PHP.