2841 wyświetlenia
1508 wyrazów
PHP 8 – co nowego

PHP 8 – co nowego

Przeczytasz w 7 minut i 32 sekundy 2020.12.18 | Aktualizacja: 7 miesięcy temu
PHP 8 – co nowego

26 Listopada 2020r. premierę miała nowa wersja PHP 8. W tym newsie opowiemy Ci o tym czym jest PHP oraz w jaki sposób wpływa na działanie i wydajność strony WordPress. Dowiedz się także, dlaczego warto zmigrować swój serwer na wersję PHP 8.

Czym jest PHP?

PHP to skryptowy język programowania, który odczytywany jest za pomocą tzw. interpretatora. Oznacza to, że skrypty przechowywane są w kodzie źródłowym, a następnie odczytywane i wykonywane po stronie serwera. Język PHP jest najpopularniejszym sposobem tworzenia nowoczesnych stron internetowych oraz aplikacji webowych działających w czasie rzeczywistym. I jak się domyślasz, dotyczy to także CMS WordPress 💁‍♂️

Możliwości interpretatora zależne są od obsługiwanych na serwerze funkcji jak i właśnie od jego wersji. Mówiąc więc PHP 8 nie mamy na myśli samego języka programowania, a przede wszystkim interpretator, który ostatecznie i tak wpływa na pewne zmiany w sposobie pisania skryptów. Wiemy jednak, że ta teoria nie wiele Ci mówi więc posłużymy się w tym momencie pewnym przykładem z życia wziętym.

Załóżmy, że korzystając z WordPress w pewnym momencie dostajesz komunikat, że Twoja strona posiada zbyt niską wartość max_input_vars. Jak możesz wyczytać na naszym blogu parametr Max Input Vars [max_input_vars} jest elementem specyfikacji PHP i definiuje limit obsługiwanej w jednym zapytaniu liczby zmiennych przesyłanych do serwera.

Taki komunikat mówi więc, że musisz zwiększyć wartość Max Input Vars, aby umożliwić interpreterowi wykonanie całego kodu np. gdy jest go zbyt wiele dla jednego zapytania poprzez np. kliknięcie w przycisk zapisu ustawień motywu.

Jak więc widzisz, napisany kod to jedno, a tak naprawdę sposób w jaki zostanie on przetworzony, szybkość jego wykonania oraz to, czy na drodze pojawią się błędy takie jak np. Błąd Failed to Open Stream [wp-settings.php] w WordPress, czy Call_user_func_array() expects parameter 1 to be a valid callback WordPress zależą właśnie od interpretatora kodu PHP.

I to on jest główny gościem tego programu ☺️

PHP 8 – co nowego?

Aktualnie wszystkie szybkie i dobre serwery dostępne np, w ofercie na hosting WordPress korzystają z wersji PHP 7. Sam PHP nie jest jednak czymś skończonym, ponieważ język ten ewoluuje tak samo jak ludzki. Co jakiś czas pojawia się nowa wersja dokładnie tak jak w przypadku wersji WordPress.

Mamy mniejsze wydania np. PHP 7.1, PHP 7.2, PHP 7.3 etc. oraz większe takie właśnie jak PHP 7 i PHP 8. Nowa wersja wydana 26 listopada 2020 roku wprowadza wiele ważnych zmian. A ponieważ PHP wykorzystywany jest praktycznie w całym systemie WordPress to używana wersja interpretatora ma ogromne znaczenie.

Poniżej poznasz najważniejsze zmiany w nowej wersji interpretatora PHP 8 wraz z przykładami zmian zaprezentowanymi przez organizację PHP.

1. PHP JIT (Just in Time) kompilator

To najważniejsza nowość w PHP 8, ponieważ znacznie wpływa na wydajność wykonywania kodu PHP. Just-in-time, czyli w skrócie JIT to kompilator, który kompiluje kod źródłowy do kodu maszynowego. W ten sposób jego wykonanie jest znacznie szybsze i dotychczas podobny efekt dawało korzystanie z modułu OPCache, który pozwala na. JIT w 100% współpracuje właśnie z OPCache, który pozwala na przechowywanie w cache skompilowanego kodu PHP.

JIT pozwala natomiast na kompilację kodu zanim trafi do OPCache, dzięki czemu całość działa jeszcze szybciej, aniżeli tylko w przypadku korzystania z modułu OPCache, który cache skompilowany kod. Niestety, choć zmiany w sobie są znaczące to nie zawsze muszą być widoczne gołym okiem, a sama implementacja JIT wymagać będzie znajomości PHP oraz konfiguracji serwera.

Poniżej możesz zobaczyć jak nowy język PHP 8 wraz z JIT wpływa na wydajność wykonywania kodu PHP na przykładzie dwóch rodzajów kompilatorów Tracing JIT i Function JIT:

PHP 8 - JIT

PHP 8 i wydajność JIT, źródło: php.net.

W przypadku WordPress, tylko Tracing JIT oferuje wzrost wydajności wykonywania kodu PHP i jest on najbardziej obiecującym z kompilatorów.

To z pewnością krok w dobrą stronę, jednak wzrosty wydajności będą najbardziej widoczne przy wymagających aplikacjach webowych. Warto jednak już dziś zwrócić się ku serwerom i hostingom WordPress, które w niedalekiej przyszłości zaoferują PHP 8 z obsługą JIT.

Zmian w PHP 8 jest jednak więcej niż samo JIT. Pozostałe są jednak zdecydowanie przeznaczone dla programistów 🙃

2. Argumenty przekazywane po nazwie

Nazywa argumenty pozwalają w PHP przekazywanie do funkcji danych bez domyślnych ich wartości. Od wersji PHP 8 przekazywane parametry mogą od teraz być przekazywane za pomocą ich nazw, a nie kolejności:

Do PHP 8:

htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

Od PHP 8:

htmlspecialchars($string, double_encode: false);

3. Atrybuty

W wersji PHP 8 wprowadzone zostały atrybuty, które pozwalają na dodanie do kodu metadanych. Atrybuty rozpoczynają się podwójnym znakiem <<, a kończą >>.

Do PHP 8:

class PostsController
{
    /**
     * @Route("/api/posts/{id}", methods={"GET"})
     */
    public function get($id) { /* ... */ }
}

Od PHP 8:

class PostsController
{
    #[Route("/api/posts/{id}", methods: ["GET"])]
    public function get($id) { /* ... */ }
}

4. Promowane właściwości konstruktora

Ta zmiana polega na możliwości łączenia właściwości klas oraz konstruktora w jednej linii.

Do PHP 8:

class Point {
  public float $x;
  public float $y;
  public float $z;

  public function __construct(
    float $x = 0.0,
    float $y = 0.0,
    float $z = 0.0
  ) {
    $this->x = $x;
    $this->y = $y;
    $this->z = $z;
  }
}

Od PHP 8:

class Point {
  public function __construct(
    public float $x = 0.0,
    public float $y = 0.0,
    public float $z = 0.0,
  ) {}
}

5. Typy łączone

Od wersji PHP 8 istnieje możliwość przypisania większej ilości zmiennych bez potrzeby używania dodatkowej adontacji. Dzięki temu możliwa jest lepsza optymalizacja kodu przez jego uproszczenie.

Do PHP 8:

class Number {
  /** @var int|float */
  private $number;

  /**
   * @param float|int $number
   */
  public function __construct($number) {
    $this->number = $number;
  }
}

new Number('NaN'); // Ok

Od PHP 8:

class Number {
  public function __construct(
    private int|float $number
  ) {}
}

new Number('NaN'); // TypeError

6. Wyrażenie dopasowania

Wyrażenia dopasowania tzwn. Match expression to ulepszona wersja dopasowań switch. Pozwala ona zwrócić nam interesującą wartość na podstawie parametru wejściowego.

Do PHP 8:

switch (8.0) {
  case '8.0':
    $result = "Oh no!";
    break;
  case 8.0:
    $result = "This is what I expected";
    break;
}
echo $result;
//> Oh no!

Od PHP 8:

echo match (8.0) {
  '8.0' => "Oh no!",
  8.0 => "This is what I expected",
};
//> This is what I expected

7. Operator nullsafe

W wersji PHP 8 został zmieniony sposób działania operatora null, dzięki czemu zwraca on wartość null już przy pierwszym błędzie. Nie wymaga to programisty konfigurowania warunków sprawdzania występowania null w kodzie.

Do PHP 8:

$country null;

if ($session !== null) {
  $user = $session->user;

  if ($user !== null) {
    $address = $user->getAddress();
  
    if ($address !== null) {
      $country = $address->country;
    }
  }
}

Od PHP 8:

$country = $session?->user?->getAddress()?->country;

8. Saner string to number comparisons

PHP 8 jeszcze lepiej radzi sobie z porównaniem liczb zawartych w łańcuchach znaków.

Do PHP 8:

0 == 'foobar' // true

Od PHP 8:

0 == 'foobar' // false

9. Spójne typy błędów dla wewnętrznych funkcji

Od wersji PHP 8 TypError będzie w sposób spójny pokazywał wszystkie wewnętrzne funkcje, dla których nie powiedzie się walidacja.

Do PHP 8:

strlen([]); // Warning: strlen() expects parameter 1 to be string, array given

array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0

Od PHP 8:

strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given

array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0

10. Pozostałe nowości

Oprócz tego PHP 8 wprowadza mnóstwo innych zmian i nowości:

  • Rygorystyczne sprawdzanie typów dla operatorów bitowych i arytmetycznych.
  • Metodę walidacje cech abstrakcyjnych.
  • Poprawne sygnatury dla metod magicznych.
  • Przeklasyfikowane ostrzeżenia dotyczące silnika.
  • Błąd krytyczny dla niekompatybilnych podpisów metod.
  • Nie wyciszanie błędów krytycznych przez operator @.
  • Dziedziczenie metod prywatnych.
  • Typ mixed.
  • Zwracanie typu static.
  • Adnotacje typu funkcji wewnętrznych.
  • Nieprzezroczyste obiekty zamiast zasobów dla rozszerzeń Curl, Gd, Sockets, OpenSSL, XMLWriter i XML.
  • Końcowy przecinek na listach parametrów.
  • Niezabezpieczone przechwytywanie.
  • Poprawki składni zmiennej.
  • Nazwy w przestrzeni nazw będące pojedynczym tokenem.
  • Wyrażenie throw.
  • Zezwalanie ::class na obiektach .
  • Klasa Weak Map.
  • Interfejs Stringable.
  • Funkcje str_contains(), str_starts_with() i str_ends_with().
  • Funkcja fdiv().
  • Funkcja get_debug_type().
  • Funkcja get_resource_id().
  • Implementacja obiektu token_get_all().

To tyle 💁‍♂️ zmian jest sporo, a ich implementacja leży po stronie programistów WordPress i innych systemów pisanych w języku PHP.

Skorzystaj z naszych programistów PHP

Jeżeli potrzebujesz stworzyć nowoczesną stronę internetową lub rozbudować system WordPress o nowe funkcje, moduły, czy też wtyczki skontaktuj się z nami. Jesteśmy cały czas dostępni, aby wdrożyć na Twojej stronie internetowej najnowszą technologię korzystając m.in. z języka PHP 8 ☺️ do usłyszenia ✋

Jesteśmy by pomagać

Skorzystaj z natychmiastowej pomocy ekspertów WordPress. Wyślij nam wiadomość za pomocą formularza kontaktowego i opisz nam swój problem lub to czego potrzebujesz.

Nazwa firmy
Sirius Pro

Dane firmy
ul. Grzybowska 87
00-844 Warszawa

Identyfikator
PL 9111958679
Zgody i prywatność
Sprawdź i wybierz, które dane może przechowywać ta strona internetowa w plikach cookies, pamięci lokalnej i sesji przeglądarki internetowej
Podstawowe funkcjonowanie strony Do poprawnego korzystania z tej strony wymagane jest anonimowe przechowywanie niektórych danych dotyczących jej wyglądu oraz sposobu działania