PHP

Jakie zmiany szykuje dla nas nowa wersja PHP?

9 minut czytania

Pierwsze główne wydanie PHP od ponad dziesięciu lat

Społeczność PHP jest bardzo podekscytowana powitaniem nowej wersji PHP, ale to nie znaczy, że PHP cały czas było w zastoju. Wręcz przeciwnie — drobne wersje PHP 5 przyniosły wiele ciekawych funkcji, w tym obsługę programowania zorientowanego obiektowo.

Dlaczego 7, a nie 6? Powiedzmy, że Unicode nie poszedł tak dobrze — podobnie jak w przypadku wielu projektów, wymagania nie były dobrze zdefiniowane i projekt został zatrzymany. Poza kodowaniem Unicode prawie wszystkie funkcje omawiane w PHP 6 zostały ostatecznie zaimplementowane w PHP 5.3 i nowszych. Po zaakceptowaniu zestawu funkcji dla głównego wydania postanowiono uniknąć pomyłki z martwym projektem i przejść od razu do wersji 7.

Co sprawia, że PHP 7 jest tak wyjątkowy? 6 nowych funkcji

1. Prędkość

Programiści bardzo ciężko pracowali nad poprawą kodu PHP, aby zmniejszyć zużycie pamięci i zwiększyć wydajność — i na pewno im się to udało. Benchmarki dla PHP 7 konsekwentnie pokazują prędkość dwa razy wyższą niż PHP 5.6. Wyniki te nie są gwarantowane dla każdego projektu, ale w przypadku wydajności CMS WordPress szybkość jest zauważalna gołym okiem.

2. Deklaracje dla typów skalarnych

Deklaracja typu oznacza określenie, jaki typ zmiennej jest ustawiany, zamiast zezwalania PHP na automatyczne ustawianie tego. PHP jest uważany za słabo typowany język — zmienne mają powiązane typy danych, ale można robić rzeczy takie jak dodawanie ciągu do liczby całkowitej bez błędu. Deklaracje typu pomagają zdefiniować, co powinno się wydarzyć, i ułatwiają czytanie kodu.

Przykład — funkcja do rejestracji studentów, wymagająca obiektu klasy Student i tablicy kierunków:

function rejestracja(Student $student, array $kierunki) {
    foreach ($kierunki as $kierunek) {
        echo "Rejestracja " . $student->imie . " na kierunku " . $kierunek;
    }
}

Próba przekazania samego imienia zamiast obiektu zwróci błąd krytyczny:

rejestracja("imie", array("kierunek 1", "kierunek 2"));

Wskazówki typu skalarnego

W PHP 7 dodane zostały typy skalarne — deklarować można string, int, float oraz boolean. Domyślnie skalarne deklaracje typu (coercive) pozwalają na rzutowanie: jeśli przekażesz ciąg zaczynający się od liczby do funkcji wymagającej float, PHP pobierze liczbę z początku i odrzuci resztę.

function suma(float $a, float $b) {
    return $a + $b;
}

suma(2, "1 przykład"); // 3.0, z ostrzeżeniem
suma(2.8, "3.2");      // 6.0

PHP 7 daje też możliwość włączenia trybu restrykcyjnego (strict) — przez dodanie declare(strict_types=1); jako pierwszej linii pliku. Wtedy każda niezgodność typu zwraca błąd krytyczny zamiast rzutowania:

declare(strict_types=1);

function suma(float $a, float $b) {
    return $a + $b;
}

suma(2, "1 przykład"); // Fatal error: Argument 2 must be of type float, string given
suma(2.5, 1);           // OK, zwraca float(3.5) — int jest "poszerzany" do float

3. Deklaracje dla typów zwracanych

PHP 7 obsługuje też deklaracje typów zwracanych, dodawane po dwukropku przed otwierającym nawiasem klamrowym:

function suma(float $a, float $b): float {
    return $a + $b;
}

Ułatwia to upewnienie się, że funkcja zwraca dokładnie to, czego oczekujemy.

4. Obsługa błędów

Wcześniej obsługa błędów krytycznych była w PHP prawie niemożliwa — błąd krytyczny po prostu zatrzymywał skrypt, co na produkcji oznaczało pusty biały ekran. W PHP 7 można przechwytywać błędy krytyczne tak jak inne wyjątki. Zarówno Error, jak i Exception implementują nową klasę Throwable, więc bloki catch-all powinny łapać Throwable zamiast Exception.

5. Nowe operatory

PHP 7 wprowadza dwa nowe operatory:

  • Spaceship (<=>) — zwraca -1, 0 lub 1 w zależności od tego, która strona porównania jest większa.
  • Null coalescing (??) — zwraca wartość po lewej stronie, jeśli jest inna niż NULL, w przeciwnym razie wartość po prawej — bez zgłaszania powiadomienia, gdy lewy operand nie istnieje.

6. Grupowanie deklaracji use

Klasy, funkcje i stałe z tej samej przestrzeni nazw można teraz pogrupować w jednym use:

// PHP 5+
use App\Blog\Post;
use App\Blog\Author as User;
use App\Blog\Comment;

// PHP 7
use App\Blog\{Post, Author as User, Comment};

Podsumowanie

PHP 7 wprowadza wiele przełomowych funkcjonalności, cieszy się zauważalnym skokiem wydajności i ograniczeniem zużycia pamięci. Trzeba jednak pamiętać, że część funkcjonalności została wycofana, co może powodować problemy przy migracji ze starszych wersji.

Gotowi na stronę, która nie każe czekać?

Napisz do nas, a przygotujemy bezpłatną wycenę.

info@dev-soft.pl · +48 607 545 703